c# - 如何确保在崩溃时保存应用程序状态 C#

标签 c# .net destructor crash-dumps application-state

我是 C# 编程的新手,所以请记住:

我有一个内存数据对象,其中包含当(如果)我的应用程序崩溃或关闭时我需要保存信息的数据。有没有办法确定性或可靠地做到这一点?

我一直在看析构函数

~MyObjectName(){}

终结器和 Dispose(),

但据我所知,这些都不能可靠地满足我的要求?

目前我正在使用析构函数,它在我关闭程序时起作用,但这并不意味着它会在崩溃时起作用,或者总是起作用。

我是否也应该查看事件?

最佳答案

没有 100% 可靠的机制可用于在进程(任何进程,而不仅仅是 .Net 进程)终止时保存数据(或做任何其他事情)——大多数使用任务管理器中的“结束进程”选项可以随时终止进程,当发生这种情况时,进程会立即被终止。举一个更极端的例子,电源线可以从机器背面拉出。

如果这个数据对象不是 100% 必须是最新的并在进程被终止后保存,那么 AppDomain.UnhandledException Event可能就足够了。

如果这种情况绝对 100% 必要,那么您需要在流程运行时不断保存此信息 - 绝对不能保证您以后有机会这样做。这就是数据库的运作方式,在某些更改记录以某种格式(例如事务日志)记录到磁盘之前,没有事务返回。这就是 D 在 ACID 中的含义.

关于c# - 如何确保在崩溃时保存应用程序状态 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9327416/

相关文章:

c# - 面试代码示例

c# 多表达式参数

c# - Debug.Assert() 已停止在我的项目中工作

c# - 无法使用DataStax C# Drive将cassandra中的 "Set"转换为c#中的 "SortedSet"或 "HashSet"

.net - 是否有适用于 .NET(C# 或 VB.NET)的 UPnP 库?

.net - 使用VB.NET查找应用程序路径

c# - 手动销毁 C# 对象

c++ - 在具有 'has-a' 关系的 C++ 类中两次调用析构函数的问题

c++ - QGestureRecognizer 自动被QGestureManager 销毁?

c# - 复杂的 Linq-to-SQL where 条件帮助