2013-06-26 7 views
6

これを明確に説明していない可能性があります。しかし、部分クラスの内部と各メソッドの内部でクラスを作成する際の欠点は何ですか? (実施例を参照してください)部分内部ASP.NETでC#クラスをページの一部またはメソッド内でインスタンス化する

例:各クラス内の

例に対する

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(); 
} 

:シナリオはここで、各メソッドで新しいインスタンスを作成したら

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

あなたのクラスとメンバーが静的であると思われる場合、どうしてなぜインスタンス化するのが嫌なのですか? – Pleun

+0

いいえ静的ではありません。 cSystemはユーティリティクラスです。私は以前の投稿からWebアプリの静的クラスから離れています。 – user2156940

+0

私もcSystemを私のコントローラの1つとして使い、.csページはそれらを使用します:{myapp} .Controllers;名前空間{myapp} .Controllers { public class cSystem { – user2156940

答えて

1

問題希望メソッドのスコープ外にオブジェクトの状態を保持する必要がある場合です。この場合、メソッドごとのインスタンスは間違っていますが、これはあなたにとっては当てはまりません。

考慮することが重要なその他のものは、その特定のオブジェクトが作成するのが重いかどうかです。

ほとんどの場合、パフォーマンスの点では味の問題ですが、通常は違いはありません。

同じインスタンスを何回も作成していて、単一のグローバルインスタンスで同じ作業を行うことができれば、最初のシナリオがより適切です。同じインスタンス化行を繰り返さないようにするだけです。

2

ほとんどのページで、実際にはそれほど大きな違いはありません。

最初の例では、Pageが作成されたときにインスタンスが作成されます。 oSystemはページの全期間利用可能です。

2番目の例では、Page_Loadイベントでインスタンスを作成しますが、これはページのライフサイクルのほぼ中間まで行われません。

ページのライフサイクルの詳細については、ASP.NET Page Life Cycle Overviewを参照してください。

インスタンスを先に使用する場合は、たとえば、Page_Initイベントでは、前の例でオブジェクトを十分早く割り当てることはありません。

アプリケーションが高性能で、非常に効率的なメモリ管理が必要な場合は、おそらく後者の例をお勧めします。この例では、使用されているときに近いメモリを割り当てて、必要以上にリソースを抱かないようにします。つまり、効率的なメモリ管理が必要な場合は、できるだけ多くの最適化を行うことができます。

したがって、ほとんどのページでは、実際的な違いはありません。

+0

良い情報、私はパフォーマンスについて考えており、あなたが言うことは理にかなっています。私はそれを、そのページの多くのメソッドで使用されているかのように見ました。一度行った場合は、それを改善しますが、各メソッドの内部に作成して、より良い管理ができるようにすることができます(GCこれらをきれいにするための最良の方法ですか?)。 – user2156940

+0

GCについては、はい。 .NETには素晴らしいGCがあります。実際、GCの周りを回ることは非常に難しいと思います。私はCOMオブジェクトなどを使用することを除いてそれを行う方法も知らない。 – Jeff

1
  • 最初のケースでは、クラスcSystemは リクエストに対して1回だけ作成されます。
  • 2番目のケースでは、submitボタンをクリックすると、クラスcSystemが作成されます.1つはPage_Loadメソッド、もう1つはbtnSubmit_Clickメソッドです。