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序列化不会发生这种行为。
答案 0 :(得分:4)
如果你看the documentation for ProcessExit
,你会发现:
所有ProcessExit事件处理程序的总执行时间都是有限的,就像所有终结器的总执行时间在进程关闭时受限一样。默认值为两秒。
因此,如果您在该处理程序中执行的任何操作花费的时间超过两秒,那么它将不会完全执行。这似乎正是你遇到的问题。