2017-01-31 1 views
4

ドットネットのメモリキャッシュエビクションはいつ発生しますか?コンソールアプリケーションの退去をどのようにシミュレートできますか?追い出されるまでオブジェクトをメモリキャッシュに追加しようとすると、代わりにOutofMemoryExceptionが発生します。ドットネットメモリキャッシュエビクス

+0

[MemoryCacheは設定上のメモリ制限に従いません](http://stackoverflow.com/questions/6895956/memorycache-does-not-obey-memory-limits-in-configuration) –

答えて

2

NameValueCollection configin the constructorに値を渡さない場合、またはデフォルトのインスタンスを使用する場合は、デフォルトの動作を制御するものがMemoryCacheElementを参照してください。

MemoryCacheElementのデフォルト値を調べると、2分ごとにチェックされます(しかし、それは速くなります)。the closer you are to the high pressure limittimer's callbackの中に入ると、MemoryCacheをトリムする割合を計算し、計算されたパーセンテージを使ってMemoryCache.Trim(Int32)を呼び出します。

the percentage calculationで注意すべきことは、Gen 2ガベージコレクションが発生していない場合、キャッシュはそれ自体を縮小しようとしません。

Gen 2のコレクションが発生する前にすべてのメモリが使い果たされているか、最初の2分のスローモードでまだクリアされる前にメモリの圧迫をチェックしていた可能性があります項目を出します。あなたが立ち退きをシミュレートしたい場合

だけ

MemoryCache.Default.Trim(50); 

を呼び出すそして、それは、デフォルトのキャッシュからキャッシュの半分を追い出します。