将数据存储在缓存/内存中,而不会在程序结束时销毁它们
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 所说的那样实现自己的缓存类型。
【讨论】:
是的,缓存是一种尝试,我用它作为例子,但据我阅读,这不是解决方案以上是关于将数据存储在缓存/内存中,而不会在程序结束时销毁它们的主要内容,如果未能解决你的问题,请参考以下文章