2016-10-02 16 views
1

私は基本的に、ユーザは、自分のDLLを追加し、参照をインポートし、そうのような方法を実行し、Singletonパターンを持っているDLLを構築しています:メモリ節約:静的変数のほうが優れていますか?

FooClass.Foo(); 

は今、このメソッドはリストを返すたびに仮定し、そして、この構造を持っている:

私は、オブジェクトを再利用し、そのリストの新しいインスタンスを作成する代わりに、リストごとにクリア Fooあなたが方法で見ることができますどのように
static class FooClass 
{ 
    private static List<string> _fooList = new List<string>(); 
    public static List<string> Foo() 
    {  
     _fooList.Clear(); 
     //list population 
     return _fooList; 
    } 
} 

Fooの方法の中で、リストの新しい性質を作成する方が良いでしょうか、私の例と同じリストオブジェクトを使用する方がいいですか?

返されるすべての結果は、ユーザーによって別のオブジェクトに保存されるため、リストをメモリに保持する必要はありません。

ヒントをいただければ幸いです!ありがとう。

+0

非同期メソッドでメソッドを何回か呼び出すと問題が発生すると思います。いくつかのメソッドは同じリスト_fooListにアクセスしようとします。 –

答えて

2

Fooメソッド内でリストの新しいインスタンスを作成する方が良いか、私の例と同じリストオブジェクトを使用する方が良いでしょうか?

clearがプログラムの他の部分で使用されている可能性があるため、2つの方法は同等ではありません。これにより、特に並行環境で重大な問題が発生する可能性があります。返された結果がユーザーによって別のオブジェクトに保存されると仮定すると、clearを使用すると、問題は事実上保証されます。

リストをメモリに保存する必要はありません。

その後、静的_fooListを削除し、メソッドが呼び出されるたびに新しいオブジェクトを作成するだけです。 1回の呼び出しごとにシングルトンをクリアすると、最初にシングルトンを持つという目的を破ります。

+0

ありがとうございました – Unchained

関連する問題