È consigliabile creare un metodo statico per il refactoring di Visual Studio?

2

Esistono varie opzioni di refactoring in Visual Studio da utilizzare al momento della codifica. Quando estraiamo e creiamo un nuovo metodo. Quindi Visual Studio deciderà se il nuovo metodo sarà statico o istantaneo a seconda dell'utilizzo all'interno del nuovo metodo. Se quel metodo usa un membro intence della classe allora crea come metodo di instence, se non usa alcun membro di instence della classe allora crea il metodo come statico. Posso capire che se non si utilizza l'utilizzo dei membri di instence, è meglio dichiarare tale metodo come statico per impedire l'inizializzazione per ogni oggetto. Il metodo statico inizia solo una volta al momento del caricamento della classe.

Ma la domanda è se ci sono molti metodi statici all'interno di varie classi di un'applicazione, quindi le prestazioni faranno male? Perché molti oggetti di quella classe condivideranno lo stesso metodo statico di quella classe? Dovremmo fare la gestione della sicurezza dei thread con quel metodo statico? O in questo tipo di impostazione è meglio creare semplicemente il metodo di instence se non ci sono usi del membro di instence della classe?

    
posta DeveloperArnab 23.01.2014 - 13:10
fonte

3 risposte

6

Non è tanto un problema di prestazioni, ma un problema di sicurezza del thread. Se si hanno metodi statici che mutano i dati statici allora sì, questi dovranno bloccare l'accesso a quei dati (anche se concesso ciò potrebbe causare problemi di prestazioni), questo naturalmente vale anche per i metodi non statici.

Tuttavia è molto più comune che i metodi statici siano pure funzioni in primo luogo, in questo caso non ci sono serrature potrebbe essere richiesto.

    
risposta data 23.01.2014 - 13:29
fonte
4

But the question is if there are many static methods inside various classes of a application, then performance will hurt?

Assolutamente no, al contrario, poiché i metodi statici non hanno un parametro "this", quindi chiamare un metodo statico sarà un po 'più veloce di chiamare un metodo non statico, dato che c'è un parametro in meno per essere spinto in pila. Nella maggior parte dei casi reali, tuttavia, la differenza di velocità è trascurabile.

Because many object of that class will share same static method of that class?

Per gli oggetti, "condividere un metodo" è come "condividere dati immutabili " - una forma thread-safe di "condivisione".

Should we do thread safety management to that static method?

Devi aggiungere la gestione della sicurezza dei thread al metodo qualsiasi che muta i dati che potrebbero essere condivisi tra thread (come i dati statici). Un metodo che è statico non implica in alcun modo la necessità di inserire dei lucchetti. I suoi soli dati condivisi possono causare problemi di threading e non importa se il metodo che accede a tali dati è statico o meno.

Quindi il refactoring VS "metodo Extract" non introduce in alcun modo problemi di sicurezza delle prestazioni o del thread nel codice. Almeno, nessuno che non fosse stato nel codice prima del refactoring.

    
risposta data 23.01.2014 - 13:51
fonte
2

Riattivo sempre i metodi statici, se possibile, solo a causa di ciò che comunica:

  1. Non muta lo stato su un'istanza della classe.
  2. Perciò può essere facilmente spostato in un'altra classe (Sposta refactoring).
  3. Ottenere un gran numero di metodi statici può essere un segno che un'altra classe sta cercando di ottenere.

Il richiamo del metodo statico è più veloce del richiamo del metodo di istanza, anche se la differenza tende ad essere insignificante (vedere questa domanda ).

Quando si utilizza anche lo stato statico nel metodo statico, è necessario fare attenzione con il re-entrancy. È più comune cambiare il metodo statico in un metodo di istanza, in modo che possa utilizzare membri sull'istanza, quindi è necessario introdurre lo stato statico.

In caso di dubbio, lascia fuori la statica.

    
risposta data 23.01.2014 - 16:44
fonte

Leggi altre domande sui tag