1
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 个序列化不会发生这种行为。

4

1 回答 1

6

如果您查看的文档ProcessExit,您会发现:

所有 ProcessExit 事件处理程序的总执行时间都是有限的,就像所有终结器的总执行时间在进程关闭时受到限制一样。默认值为两秒。

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

于 2012-09-09T18:49:08.213 回答