ASP.NET MVC(5)アプリケーションのメモリ管理に関する詳細を知りたいと思います。簡単のためMVCアプリケーションのメモリ管理
、ページングが実装されている(だけIEnumerable<CustomItem>
の70個の000アイテムを取得するために私api controller
に向けたhttp.get()
呼び出しを行い、その後のページに結果を出力する、我々は、角度コントローラと簡単なページを持っているとしましょう)。
私の診断ツール(メモリプロファイラ)を見ると、メモリが50 MB(開始点)から300 MBまで(すべてのデータが取得された後)に上昇することがわかります。ここで
は、私は理解していないものです:私は同時に別のブラウザで同じページを開いたとき(複数のユーザーが同時にページを訪問していることをシミュレートしようとしている)のはなぜ
、 2番目のユーザーのメモリ消費量は250 MB増加しませんが、データが再度読み込まれても同じになります。
私は印象に残っていましたが、ApiController
はユーザー間で共有されていませんが、すべてのユーザーに対して新しいインスタンスが作成されています。私が正しければ、それは本当に事実です、どのように70 000以上のアイテムが到着したときに、メモリ消費は変化しませんでしたか?
すべての記事または説明は高く評価されます。
追加1:
マイAPIコントローラはSharePoint
からデータをrerievingされているので、私は後で改ページを実装して、私の角度成分に一度にすべての70件の000レコードを渡す必要があります。言い換えれば、私のコンポーネントはすべてのデータ(70 000レコード)を1回だけロードし、その後はその部分だけを表示します(そうでなければ、ブラウザがフリーズしていた70,000アイテムにdata-ng-repeat
を使用した場合)。
実際には、必要ならばApiController
コードを表示することができますが、実際には3行のコードを持っているIEnumerable<CustomItem>
を返します。これは次のようになります。
public class SharepointFile
{
public string FileType { get; set; }
public string FileName { get; set; }
public string FilePath { get; set; }
}
あなたはどのデータベースを使用していますか?あなたのコントローラのソースコードはどのように見えますか?レコードの平均サイズは?ここで起こっていることを言うのは難しいです。ほとんどのメモリ使用量はアプリケーション自体でありデータではないかもしれませんが、わかりません。 –
詳細情報が必要な場合は、すべてのレコードをメモリにロードしますか?もしページングが正しい方法(データベース側)で実装されていれば、 'IEnumerable'に70Kのレコードを持っていることはありません。あなたが表示する必要があるもの(現在のページ)があります。サーバ。 –
JOBG
あなたが投げている数字から、すべての70kレコードをメモリにロードしているようです。単一のページ付けされたクエリの場合、メモリはそれほど上がるべきではありません。 – user449689