【问题标题】:Store data in cache/ram without destroying them at the end of the program将数据存储在缓存/内存中,而不会在程序结束时销毁它们
【发布时间】:2021-09-03 06:14:56
【问题描述】:

正如我在标题中所说,我试图将一个对象放入内存中,而不是在程序结束时杀死它, 主要思想是,如果对象不在内存中,程序会在开始时创建它,但如果是,程序会检索对象的所有数据。 这是 System.Runtime.Caching 的一个例子;

    class CachingTest
    {
        private static string WORDWRAPKEY = "WrapperWord";

        public string value { get; set; }
        public string data = "data to store";

        public CachingTest()
        {
            ObjectCache cache = MemoryCache.Default;
            if (cache.Contains(WORDWRAPKEY))
                value = "EXIST";
            else
            {
                CacheItemPolicy cacheItemPolicy = new CacheItemPolicy();
                cacheItemPolicy.AbsoluteExpiration = ObjectCache.InfiniteAbsoluteExpiration;
                cache.Add(WORDWRAPKEY, data, cacheItemPolicy);
                value = "CREATE";
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            CachingTest test = new CachingTest();
            Console.WriteLine("Data value statement: " + test.value);
            Console.ReadLine();
        }
    } 

事实是,t 他的语句总是“CREATE”并且永远不存在,所以我可以假设缓存在 pregram 结束时被杀死。 有没有办法在程序结束时将数据存储在内存中而不破坏它?

【问题讨论】:

  • 您正在寻找持久数据存储。 RAM 不是持久的,如果程序结束或计算机关闭 - 它会被清除。使用文件、数据库或更永久的东西。
  • 操作系统在将它交给另一个程序之前清除所有返回给它的内存。即使不是这种情况,内存是按页面分配的,它也可能最终位于不同的地址。即使不是这种情况,.net VM 也不会再次为变量使用相同的地址。如果您想要持久性,请将其写入磁盘、数据库、注册表...
  • 是的,如果电脑关机,我会重新创建,没问题。我想保留数据直到电脑关机
  • 您可以在 CachingTest 类上实现 IDisposable 或“Finalize”析构函数,这样当程序关闭时,您可以将缓存保存在文件或永久数据库中?

标签: c# .net caching memory ram


【解决方案1】:

正如@gunr2171 所说,您使用的是MemoryCache,因此您仅在当前应用程序实例中显式缓存项目。如果您想要不同的行为,那么您应该像System.Runtime.Caching.ObjectCache Remarks 所说的那样实现自己的缓存类型。

【讨论】:

  • 是的,缓存是一种尝试,我用它作为例子,但据我阅读,这不是解决方案
猜你喜欢
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多