using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace empty
{
class Program
{
static Program()
{
AppDomain.CurrentDomain.ProcessExit += ExitHandler;
}
static void Main(string[] args)
{
}
static void ExitHandler(object o, EventArgs args)
{
using (FileStream fs = new FileStream("file.bin", FileMode.Create))
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, new double[30000000]);
}
using (FileStream fs = new FileStream("file.bin", FileMode.Create))
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, new double[30000000]);
}
Console.WriteLine("end");
}
}
}
我期望得到输出:
“结束”
但一无所获。我究竟做错了什么?
我故意使用2序列化,因为1序列化不会发生这种现象。
最佳答案
如果查看the documentation for ProcessExit
,您会发现:
所有ProcessExit事件处理程序的总执行时间受到限制,就像所有终结器的总执行时间在进程关闭时受到限制一样。默认值为两秒钟。
因此,如果您在该处理程序中执行的任何操作花费了超过两秒钟的时间,那么它就不会完全执行。这似乎正是您遇到的问题。