どのように使っています。ます。キャッシュ.キャッシュコンソール-アプリケーション?

StackOverflow https://stackoverflow.com/questions/1037695

質問

コンテクスト:.純3.5コンポーネントは、シッピング
たいと思っていますキャッシュ機構私のコンソール-アプリケーション.
代わりに開発のホイールをお使い System.Web.Caching.Cache (ことになる最終決定は、利用できないその他のキャッシングの枠組みださない理由).
しかしなんだかとってもおいしそう System.Web.Caching.Cache ってのみ実行で有効なHTTPコンテキスト私は非常に簡単なスニペットのようになります。

using System;
using System.Web.Caching;
using System.Web;

Cache c = new Cache();

try
{
    c.Insert("a", 123);
}
catch (Exception ex)
{
    Console.WriteLine("cannot insert to cache, exception:");
    Console.WriteLine(ex);
}

その結果は:

cannot insert to cache, exception:
System.NullReferenceException: Object reference not set to an instance of an object.
   at System.Web.Caching.Cache.Insert(String key, Object value)
   at MyClass.RunSnippet()

で明らかになっているようです。そのアイデア?


更新:+1ほとんどの回答のキャッシュによる静的メソッドは、正しい使い方、すなわち HttpRuntime.CacheHttpContext.Current.Cache.ありがとうございました。

役に立ちましたか?

解決

Cacheコンストラクターのドキュメントには、内部使用専用であると書かれています。 Cacheオブジェクトを取得するには、コンストラクターを介してインスタンスを作成するのではなく、HttpRuntime.Cacheを呼び出します。

他のヒント

OPはv3.5を指定しましたが、v4がリリースされる前に質問されました。この質問を見つけた人がv4の依存関係で 生活できるように、フレームワークチームはこのタイプのシナリオ用の新しい汎用キャッシュを作成しました。 System.Runtime.Caching名前空間にあります。 http://msdn.microsoft.com/en -us / library / dd997357%28v = VS.100%29.aspx

デフォルトのキャッシュインスタンスへの静的参照は、MemoryCache.Default

です。

いただけます。 キャッシング用ブロック 行わない場合は管理ソリューションを提供いただけます。だいたいのASP.NET キャッシュ- こちらをご参照.してくださいここだけます。純2.0以上ものです。けることができなかったキャッシュを利用し外ASP.NET ます。純1.

MSDNは、ドミトリーは警告のページのキャッシュに書ています:

キャッシュのクラスをご用意しています 以外の利用ASP.NET 願います。また、テストされた ASP.ネットのためにキャッシュ機能を提供しウェブ 願います。その他の種類の 用途など、コンソール 用途またはWindows Forms 用途ASP.NET キャッシュが なが機能しなくなっていたのを修正

非常に軽量化、使い心配は有効期限など、その辞書オブジェクトです。

私はこのページで同じことを考えて終わりました。ここに私がやっていることがあります(私は好きではありませんが、うまくいくようです):

HttpContext context = HttpContext.Current;
if (context == null)
{
    HttpRequest request = new HttpRequest(string.Empty, "http://tempuri.org", string.Empty);
    HttpResponse response = new HttpResponse(new StreamWriter(new MemoryStream()));
    context = new HttpContext(request, response);
    HttpContext.Current = context;
}
this.cache = context.Cache;

試用

public class AspnetDataCache : IDataCache
{
    private readonly Cache _cache;

    public AspnetDataCache(Cache cache)
    {
        _cache = cache;
    }

    public AspnetDataCache()
        : this(HttpRuntime.Cache)
    {

    }
    public void Put(string key, object obj, TimeSpan expireNext)
    {
        if (key == null || obj == null)
            return;
        _cache.Insert(key, obj, null, DateTime.Now.Add(expireNext), TimeSpan.Zero);
    }

    public object Get(string key)
    {
        return _cache.Get(key);
    }

のシステム。ます。キャッシュ.キャッシュクラスに依存して有する会員"と_cacheInternalのHttpRuntimeオブジェクトです。

に使えるサービスです。ます。キャッシュの授業があるんをHttpRuntimeオブジェクト設定のHttpRuntime.キャッシュの物件です。ま有効にしてつねにIIS.

いに基づいており、また以下のその他のキャッシングの枠組みのように:

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top