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事件处理程序的总执行时间受到限制,就像所有终结器的总执行时间在进程关闭时受到限制一样。默认值为两秒钟。


因此,如果您在该处理程序中执行的任何操作花费了超过两秒钟的时间,那么它就不会完全执行。这似乎正是您遇到的问题。

10-01 06:15
查看更多