これは基本的に問題ありません。本当に良い戦略はありません。競合する複数のアプリケーションがある場合、これはキャッシュ競合と誤った追い出しにつながる可能性があります。
スレッショルドが低すぎるとキャッシュスペースが浪費されます。それが高すぎる場合は、ファイルキャッシュ、DLLなどのメモリに収まるものはほかにありません。
"利用可能な物理メモリ"とはどういう意味ですか?無料のメモリまたはメモリをインストールしたことを意味しますか?アプリはどのように空きメモリの80%を使用できますか?あなたが使用している定義が不明です。
SQL Serverは、OSがメモリ不足を通知するまでメモリを使用します(「何か」の95%が使用されていると思われます)。
メモリを解放するためにGCを使用したくないのは確かです。それはあなたのキャッシュ全体を日常的に殺します。
キャッシュの内容を完全にディスクに移動することはできますか?または、アプリケーションプロセスによってクエリできる隠しキャッシュサーバープロセスを持つことによって、.NETプロセス間でキャッシュを共有できます。
は、私はあなたのアプリケーションは、(例として)インストールされているRAMの99%を消費した場合、ファイルキャッシュがほとんど空であるため、パフォーマンスが非常に悪いとなりますことを強調したいです。これは、DLLと.NET NGENされたコードでさえ、頻繁にページアウトされることを意味します。
OSとアプリケーションファイルを適切にキャッシュするには1GBが必要になると考えてください。したがって、インストールされているRAMからわずか10%で1GBを引いたものがなくなるまでメモリを消費することができます。
出典
2016-05-26 15:08:51
usr
利用可能な物理メモリとは、無料のメモリを意味します。私はタイムリーなオブジェクトの割り振り解除に関してGCを完全に信頼することはできませんが、これまでのところテストでは問題にはなりませんでした。 また、別々のウィンドウは単一のWindowsプロセスでホストされるため、それらの間でキャッシュを共有する心配はありません。 OSが低メモリについてどのように通知しますか?とにかく.Netの信号を傍受することはありますか? –
これにはAPIがあります:https://msdn.microsoft.com/en-us/library/windows/desktop/aa366541(v=vs.85).aspxしかし、Windowsが「低」と考えるものはあなたのものではないかもしれません欲しいです。それは任意の閾値です。 「私たちは空きメモリの最大80%を消費する」と言うなら、そのメモリはもはや空きメモリではありません。その定義は意味をなさない。メモリを消費して分母を変更しています。 – usr
申し訳ありませんが、メモリ使用状況に関する私の悪い。私はその問題でそれを修正した。 –