我即将在C#中开发Windows服务。 该服务需要跟踪系统中的事件,并不时地向文件写入一些数据。 这些正在进行的事件形成一个特定的状态,所以我会把状态保存在内存中,并在事件到达时更新它。 我不想过度复杂的东西,所以我不希望状态持久性在磁盘上,但我想知道如果我可以以某种方式使它在内存中持久,以便如果服务崩溃(并自动重新启动Windows),它可以从它离开的地方继续(可能会丢失一些事件,而不是一个大问题)。
我正在考虑创build一个“共享”内存区域,从而让Windowspipe理它,只在服务中使用它 – 但是我不确定在服务死后这个对象会持续存在。
有任何想法吗?
编辑 :我不是在寻找一个矫枉过正的解决scheme。 数据有点重要,所以我想保持它在内存中等待,直到服务重新启动,但数据并不重要。 如果我可以轻松地保存数据,而不需要使用文件,外部第三方进程等等,那么它就是一个很好的function。 我的理想解决scheme将是一个简单的内置function(在.NET或Windows中),这将为我提供一些实际的持久性,以便从崩溃事件中恢复。
检查Windows窗体滚动条是否一直向下滚动?
从Windows移植到Mac
如何创build从C#到C + +委托,将IEnumerable作为参数与SWIG的通过?
如何将parameter passing给Windows服务
如何刷新winform上的数据驱动comboBox
在禁用wow64redirect之后,“找不到指定的程序”
写入Windows应用程序事件日志,无需注册事件源
从Windows媒体库获取目录列表
检查SuspendLayout
.NET Windows商店数据
您可以使用Microsoft企业库中的Persitent缓存块。
它是可配置的,你可以使用许多后备商店,如数据库和隔离存储。
我知道你说过,你不想过度复杂的东西坚持到磁盘,但它肯定会更加复杂的坚持到共享内存或任何这里列出的解决方案的东西。 这么多应用程序使用数据库或文件存储的原因是因为这是最简单的解决方案。
我建议你把所有的状态保存在一个单独的对象或对象层次结构中,将这个对象序列化为XML并将其写入一个文件。 这实际上并没有那么简单。
您可以使用Memcached或Redis(它也将其数据保留在磁盘上,但会自动处理)。
http://code.google.com/p/redis/
你也可以看看这个问题:
Memcached与Windows和.NET
我不明白为什么要坚持到磁盘更难。
使用db4o你可以坚持你已经在使用的实例。
如何使用独立存储并以这种方式将对象存储在内存中?
例如,即使您将数据保存在其他一些网络PC的共享内存上,您将如何“保证” 网络PC不会挂起/重新启动/暂停/ etc? 在这种情况下,您的服务无论如何都会丢失持久数据。
我会建议,而且很可能最终将数据存储在同一个磁盘上。
请注意,由于内存(RAM)的易失性,在系统重新启动之前无法重新加载以前存在的数据; 除非您使用某种机制来存储/重新加载磁盘。
– 编辑 –
在这种情况下,如何使用MSMQ ? 因此,您可以将所有内容都推送到队列中,即使您的服务重新启动,也会查找队列中的项目并继续。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。