2011-10-26 7 views
0

私はasp.net mvc 3のWebサイトを持っています。ローカルのVS WebサーバーまたはIIS上で実行しているときは、それは大丈夫です。しかし、IIS(IIS 7.5 Windows 2008 R2)上で実行すると、メモリ使用量が常に増えているため、メモリリークのように見えます。何か案は?IISとIISエクスプレスメモリリーク

つ以上更新:アプリでこのようなコードthere`s:

SqlConnection conn = new SqlConnection { //creating connection here }; 
conn.Open(); 
SqlCommand command = conn.CreateCommand(); 

try 
{ 
    var reader = command.ExecuteReader(); 
    while (reader.Read()) 
    { 
     //read the data 
    } 
} 
finally 
{ 
    conn.Close(); 
} 

たぶんreader.Disposeのようなものがあるはず?メモリリークの原因になりますか?


更新:何らかの理由でgc.Collectが問題を修正しました。しかし、gc.collectを呼び出すことは悪い考えであるため、それは不可能です。

+2

プロファイルアプリケーションを使用しましたか?私はこの質問の中であなたのアプリケーションについて提供した情報で、あなたが幸運を願って問題を見つけるのを手助けするためにできる最善のことを言います。しかし、あなたがこの質問をしたとき、私はそれがあなたが期待していたものではないと思います。アプリケーションが何をしているのか、それらのメモリのピークを観察しているのか、今のところアプリケーションが何をしているのか、もっと多くの情報を提供する必要があります。 –

+0

あなたは正しいです、ダーリン。私は何を提供すべきか分からない。私はそれがどこに行くのか分かっているようです - 私はそれを修正するでしょう。私はメモリリークが.netでどのように起こるかを理解していません。私たちは、DBのためのエンティティフレームワークだけを使用しています。 –

答えて

3

ここでは、ブラケットを使用することをお勧めします。これはC#の優れた機能です。ブラケットで "using"キーワードを使用すると、ブラケットスコープを使い果たしたときに自動的に使用されたオブジェクトが破棄されます。ここに例があります。

// SqlConnection implements IDisposable, will be disposed after bracket is closed 
using(SqlConnection conn = new SqlConnection()) 
{ 
     conn.Open(); 
     // SqlCommand implements IDisposable, will be disposed after bracket is closed 
     using(SqlCommand command = conn.CreateCommand()) 
     { 
     // DataReader implements IDisposable, will be disposed after bracket is closed 
     using(var reader = command.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       // read here. 
      } 
     } 
     } 
} 

「このブロックは、使用ブロックの最後で自動的に閉じられます」というマイクロソフトのリンクもあります。 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.close%28v=VS.85%29.aspx

私はそれが役に立ちそうです。

+0

あなたは自動的に 'Close()'を呼び出します( 'SqlConnection'と' SqlDataReader'の場合) – SliverNinja

+0

答え、detayに感謝します。実際にはすでに変更が行われています。今すぐ導入し、それが問題かどうかをお知らせください。 –

+0

まだ展開を待っています:-(。asap。 –