0

私の .net アプリケーションでは、LINQ-to-SQL を使用してデータベースからデータを取得しました。データの量はまったく大きくありません (10 行のデータ)。しかし、サーバーにまだ予備のメモリがあるにもかかわらず、関数で「system.outofmemoryException」を常にキャッチしました。興味深いことに、ADO 関数を使用して他のページからデータを取得できます。

アプリケーション プールが再起動すると、問題は修正されます。時々、問題が再発します。このシナリオをどのようにデバッグすればよいか手がかりはありますか?

注:すべてのデータコンテキスト接続に「using」ブロックを使用しました。文字通り、すべてのデータコンテキストは使用後に破棄されます。

以下はコードです。簡単です。

using (StoreDataContext db = new StoreDataContext(conn)) 
{
     var list = from category in db.ProductCategories 
                select category;

     ddlCategory.DataSource = list.Distinct().ToList();
     ddlCategory.DataTextField = "CategoryName";
     ddlCategory.DataValueField = "CategoryName";
     ddlCategory.DataBind();
}
4

2 に答える 2

1

プログラムの実行を続行するのに十分なメモリがない場合にスローされる例外。

メッセージを表示するには、OutOfMemoryException コンストラクターを参照してください。

理由:

  1. 無限ループがあります。

  2. 大量のデータがあります。コンテキスト ans エンティティ セットをロードするときに、クエリ sql を確認してください。

于 2012-08-02T08:14:05.760 に答える
1

私の提案は、JetBrains dotTraceRedGate の Ants Profilerなどのメモリ プロファイリング ツールを使用することです(それらは市場に出回っています)。

個人的な経験でも、Web アプリケーションで同じ問題が発生し、dotTrace が不十分に記述されたコードをトレースしてくれました

于 2012-08-02T08:14:14.653 に答える