2016-07-07 8 views
0

私の質問は本当に簡単です。 私はクラスの20.000点を作成する必要があります。インスタンス化されたクラスの中にメソッドを入れるのがメモリの面で最善かどうか、あるいは呼び出し元のクラスにメソッドを1つしか持たない方がよい私が計算する必要がある単一のクラスのプロパティ。私が意味する.net c#クラスのメモリ割り当て

は、メモリの観点から、それが最善です:

シナリオA)

public class b 
{ 
    public string name; 
    public string result; 
} 

public class a 
{  
    public string myMethod(string name) 
    { 
    //do complex things... long method... 
    } 

    //create 20.000 istances of class b 
    //and when I need it... I take one of them and do something like... 
    myclassB.result=myMethod(myclassB.name)  
} 

ORシナリオB)

public class b 
{ 
    private string name;  
    private string result; 
    private string myMethod() 
    { 
     //do complex things... long method... 
     result="something"; 
    } 
} 

public class a 
{ 
    //create 20.000 istances of class b 
    //and when I need it... I take one of them and do something like... 
    myclassB.myMethod(); 
} 

私は20.000 istancesを作成するとき、私は、意味しますその内部にメソッドを持つクラスは、 "メモリにメソッドを20.000回"複製しますか?それとも、それを作成し、それを自分自身で処理するのだろうか?

+3

いいえ、メソッド自体はオブジェクトの状態の一部ではありません。フィールドだけが関連します。 –

+0

Jonが言ったように、もう一つ考慮すべきことは、メソッドが長くて複雑な場合は、おそらくいくつかのプライベートメソッドとして、あるいはそれ自身のクラスのいくつかのメソッドとして実装されるべきであるということです。 –

+0

ありがとうございました!あなたは私に数時間の再コーディングを保存しました:-) – BitQuestions

答えて

3

メモリ使用量に関して、2つのシナリオは同じように動作します。

+0

これは正しいですしかし、なぜこれが本当であるのかについていくつか詳しく説明したら、私はそれを望んでいます。私はジョン・スケートさんがコメントを残しているのを見て、答えを準備しているかもしれません。 – overslacked

0

これについては気にする必要はありませんが、別のやり方を取ってみましょう。関数のポインタは約2バイトのメモリに相当します。あなたのメソッドが割り当てを必要とするものと仮定しましょう各オブジェクトのこのメモリ。アプリケーションは現在20Kbのメモリを使用しています。そして、これがまだあなたには好きなら、C#の単純なhello worldコンソールアプリケーションでは、デバッガをアタッチしてリリースしたときに最大4Mバイトのメモリが必要になると考えてください。これは、すべてのメソッドが関数へのポインタのメモリを取る場合に比べて200倍以上のメモリです。これは、心配しなければならないメモリ割り当ての背後にある穴のことについてのイメージを与えることに過ぎません。

特に管理対象の環境でコードを記述しているため、アプリケーションで行う必要があることとその設計について考えることが最善のことです。