2013-06-26 5 views
6

Potrei non spiegarlo chiaramente. Ma quali sono gli svantaggi nel creare la classe all'interno della classe parziale rispetto a ciascun metodo? (Si vedano gli esempi)Istanziare la classe C# in ASP.NET nella pagina parziale o nel metodo

Esempio all'interno parziale:

public partial class test: System.Web.UI.Page 
{ 

cSystem oSystem = new cSystem(); 

protected void Page_Load(object sender, EventArgs e) 
    { 
    oSystem.useme(); 
} 
protected void btnSubmit_Click(object sender, EventArgs e) 
    { 
    oSystem.usethis(); 
} 

contro

Esempio all'interno di ciascuna classe:

public partial class test: System.Web.UI.Page 
{ 


protected void Page_Load(object sender, EventArgs e) 
    { 
    cSystem oSystem = new cSystem(); 
    oSystem.useme(); 
} 
protected void btnSubmit_Click(object sender, EventArgs e) 
    { 
    cSystem oSystem = new cSystem(); 
    oSystem.usethis(); 
} 
+1

Perché preoccuparsi di istanziare affatto se la tua classe ei membri sembrano essere statici in ogni caso – Pleun

+0

no non è statico. cSystem è una classe di utilità. Rimango lontano dalle lezioni statiche sulle app Web di un post precedente. – user2156940

+0

Uso anche cSystem come uno dei miei controller e la pagina .cs li usa: usando {myapp} .Controllers; namespace {myapp} .Controllori { public class cSystem { – user2156940

risposta

1

volta scenario in cui la creazione di una nuova istanza su ciascun metodo sarebbe un problema è se è necessario mantenere lo stato dell'oggetto al di fuori dell'ambito del metodo. In questo caso, un'istanza per metodo sarebbe errata, ma presumo che non sia così per te.

Un'altra cosa che potrebbe essere importante considerare è se quell'oggetto particolare è pesante da creare o meno.

Nella maggior parte dei casi è solo una questione di gusti, dal punto di vista della perfomance, di solito non fa differenza.

Proabilmente il primo scenario è più appropriato se si crea la stessa istanza molte volte e si potrebbe fare lo stesso lavoro con un'istanza singola e globale. Giusto per evitare di ripetere la stessa linea di istanziazione.

2

Nella maggior parte delle pagine, non c'è davvero molta differenza nella pratica.

Il primo esempio creerà l'istanza quando viene creato lo Page. oSystem sarà disponibile per l'intera durata della pagina.

Il secondo esempio creerà l'istanza nell'evento Page_Load che non si verifica fino a circa metà del ciclo di vita della pagina.

Vedere ASP.NET Page Life Cycle Overview per ulteriori informazioni sul ciclo di vita della pagina.

Se si desidera utilizzare l'istanza in precedenza, per esempio nell'evento Page_Init, il precedente esempio non allocava l'oggetto in precedenza.

Se l'applicazione deve essere ad alte prestazioni, che richiede una gestione della memoria molto efficiente, probabilmente si preferisce l'ultimo esempio. Questo esempio alloca la memoria più vicino a quando è in uso, quindi non sarà necessario legare le risorse più a lungo del necessario. Detto questo, se si desidera una gestione efficiente della memoria, ci sono molte ottimizzazioni che si possono fare.

Quindi, nella maggior parte delle pagine, non c'è una differenza pratica.

+0

Buone informazioni, penso alle prestazioni e quello che dici ha un senso. L'ho guardato come se fosse usato in molti dei metodi su quella pagina che se lo avessi fatto una volta sarebbe stato gestito meglio, ma potrebbe essere più bello crearlo all'interno di ogni metodo in modo che sia gestito meglio (presumo GC è il modo migliore per avere questi ripuliti?). – user2156940

+0

Per quanto riguarda il GC, sì. .NET ha un ottimo GC. In effetti, penso che sia abbastanza difficile aggirare il GC. Non so nemmeno come farlo tranne per l'utilizzo di oggetti COM o qualcosa del genere. – Jeff

1
  • Nel primo caso la classe cSystem verrà creata una sola volta per la richiesta .
  • Nel secondo caso, la classe cSystem verrà creata due volte quando si fa clic sul pulsante di invio, una nel metodo Page_Load e un'altra nel metodo btnSubmit_Click.
Problemi correlati