2

このスレッドMemoryCache Empty : Returns null after being setで言及されている Cache の破棄に関する問題の回避策を実装するのに苦労しています。

私の最新の試みには、インスタンスを取得する次のコードがあり、提案どおりにラップされ、using ステートメントでキャッシュが破棄されるのを抑制します。

private static CacheDl _instance;
public static CacheDl Instance
{
    get
    {
        if (_instance == null)
        {
            using (ExecutionContext.SuppressFlow())
            {
                _instance = new CacheDl();
            }
        }

        return _instance;
    }
}

private static ObjectCache Cache { get { return MemoryCache.Default; } }

もちろん、これは機能しません..キャッシュの「ゲッター」を同様のものでラップしようとしましたが、まだ取り決めはありません。

また、大きな pollingInterval を指定して動作を完全に抑制しようとしましたが、まだ成功していません。

private ObjectCache _cache;
private ObjectCache Cache
{
    get
    {
        using (ExecutionContext.SuppressFlow())
        {
            return _cache ?? (_cache = new MemoryCache("my-cache", new NameValueCollection { { "pollingInterval", "30:00:00" } }));
        }
    }
}

あなたはそれを推測しました、運が悪いです。どんな助けでも大歓迎です。

ところで、私はマイクロソフトに上記の修正パックを既に要求しましたが、要求を送信してから 4 時間経ってもまだ何も連絡がありません..

正直なところ、.NET 4.5 以外のシステムでこれを機能させるためにハッキングする必要がないように、これが公式の Windows Update にまとめられることを本当に望んでいます。

更新: 具体的には、推奨される回避策をどのように実装するつもりなのかを知りたいです。誰かがこれを実装する方法の例を示してもらえますか?

4

2 に答える 2

0

これを構成設定で整理して、キャッシュのポーリング間隔を十分に延長し、間隔に達する前にアプリケーションプールがリサイクルされるようにしました。Cache インスタンスを構築するときにコードでこれを実行しようとしましたが、うまくいきませんでした..

関連する Connect の問題に関するコメントでは、アプリケーション プールを制御できる場合はこれが実行可能なハックであると言及されていますが、social.msdn フォーラムで別のコメントが言及されています。

接続の問題

social.msdn

ポーリング間隔を 30 時間増やす構成設定:

<system.runtime.caching>
    <memoryCache>
        <namedCaches>
            <add name="Default"
                cacheMemoryLimitMegabytes="0"
                physicalMemoryLimitPercentage="0"
                pollingInterval="30:00:00" />
        </namedCaches>
    </memoryCache>
</system.runtime.caching>
于 2013-07-02T07:17:44.283 に答える