0

パフォーマンス上の理由から、.NET system.runtime.caching を使用して多くのオブジェクトをキャッシュします。EF データコンテキストからのエンティティをキャッシュしています。私はデータコンテキストを破棄していますが、そこからのエンティティはキャッシュにあるため、GC はそれを収集できないということですか?

コード例:

 public static Menu GetMenu(string menuName, string languageCode)
        {
            ObjectCache cache = MemoryCache.Default;
            var menu = (Menu)cache[menuName + "cache"];

            if (menu == null)
            {
                using (PageDb db = new PageDb())
                {
                    menu = db.Menus.Where(m => m.Name == menuName && m.LanguageCode == languageCode).FirstOrDefault();
                }

                CacheItemPolicy policy = new CacheItemPolicy();
                policy.AbsoluteExpiration = DateTimeOffset.Now.AddMonths(1);
                cache.Set(menuName + "cache", menu, policy);
            }

            return menu;
        }

ご覧のとおり、メニュー オブジェクトをキャッシュに格納していますが、これは PageDb データ コンテキストからのものです。メニュー オブジェクトは 1 か月間メモリに保持されるはずですが、PageDb データ コンテキストはどうでしょうか。

4

0 に答える 0