将数据存储在缓存/内存中,而不会在程序结束时销毁它们

Posted

技术标签:

【中文标题】将数据存储在缓存/内存中,而不会在程序结束时销毁它们【英文标题】: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 结束时被杀死。 有没有办法在程序结束时将数据存储在内存中而不破坏它?

【问题讨论】:

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

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

【讨论】:

是的,缓存是一种尝试,我用它作为例子,但据我阅读,这不是解决方案

以上是关于将数据存储在缓存/内存中,而不会在程序结束时销毁它们的主要内容,如果未能解决你的问题,请参考以下文章

hibernate缓存机制

如何清理Nginx缓存

内存,缓存,cpu,硬盘关系

JVM运行时数据区

JVM-内存管理

JVM的内存模型