Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在应用程序外部缓存数据_C#_.net_Caching - Fatal编程技术网

C# 在应用程序外部缓存数据

C# 在应用程序外部缓存数据,c#,.net,caching,C#,.net,Caching,我试图缓存从SQL服务获取的数据,我尝试使用System.Runtime.Caching中的Memory cache类,但每次退出应用程序时,缓存都会被清空 所以我的问题是,有没有一种方法可以缓存我的数据,这样即使我的应用程序重新启动,我也可以获取它 我正在使用Biztalk中的服务,因此应用程序可以在需要时启动,但SQL轮询需要的时间太长 以下是im测试的代码: const string KEY = "key"; static void Main(string[] args)

我试图缓存从SQL服务获取的数据,我尝试使用System.Runtime.Caching中的Memory cache类,但每次退出应用程序时,缓存都会被清空

所以我的问题是,有没有一种方法可以缓存我的数据,这样即使我的应用程序重新启动,我也可以获取它

我正在使用Biztalk中的服务,因此应用程序可以在需要时启动,但SQL轮询需要的时间太长

以下是im测试的代码:

const string KEY = "key";

    static void Main(string[] args)
    {
        MemoryCache cache = MemoryCache.Default;

        Cache(cache);
        Get(cache);
        Console.Read();
    }

    private static void Get(MemoryCache cache)
    {
        string result = cache.Get(KEY) as string;
        Console.WriteLine(result);
    }

    private static void Cache(MemoryCache cache)
    {
        CacheItemPolicy policy = new CacheItemPolicy();
        policy.AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(10);
        bool res = cache.Add(KEY, "This was Cached", policy);
        if (res)
            Console.WriteLine("Added Succesfully");
        else
            Console.WriteLine("Adding Failed");
    }
所以我的问题是,有没有一种方法可以缓存我的数据,这样即使我的应用程序重新启动,我也可以获取它

对。如果使用,即使应用程序重新启动,缓存也将继续存在

ObjectCache cache = System.Runtime.Caching.MemoryCache.Default;
CacheItemPolicy policy = new CacheItemPolicy
{
    Priority = CacheItemPriority.NotRemovable,
    AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(10);
};

cache.Add(item, policy);
MSDN注意:向缓存中添加优先级为NotRemovable的条目可能会使缓存溢出无法删除的条目。缓存实现仅应为缓存项设置NotRemovable优先级,前提是它们提供了从缓存中逐出此类项并管理缓存项数量的方法


MemoryCache只在内存中存储数据。您需要一个文件缓存或数据库缓存,但框架中不存在任何文件缓存或数据库缓存。您可以尝试使用Redis()进行缓存。GIF“应用程序重新启动”表示新的进程/应用程序域,MemoryCache不可能仍然包含您以前缓存的项目,无论您如何努力缓存它们;)这适用于基于ASP.NET的应用程序。当然,如果您谈论的是一个胖客户机,那么重启应用程序就不同了,所有分配的内存都将丢失,包括缓存。但是我在ASP.NET中使用它,我可以在不丢失缓存数据的情况下重新启动应用程序。