我有一个使用Windows服务自托管的单实例WCF服务类。我在OnStart事件中设置了服务主机,并在OnStop事件中关闭了服务。
在服务类中,我实现了一个析构函数,我在那里有一些清理代码。本质上,清理代码会将一些内部对象序列化为磁盘,并且应该生成两个文件。
我所看到的有时是两个文件,有时一个,有时是空文件,其中应该有数据。在整个服务过程结束之前,似乎析构函数没有时间完成对象的序列化。
这是在服务关闭之前做家务的典型方式,还是有更好的方式?
答案 0 :(得分:4)
析构函数是执行此类逻辑b / c的不好的地方,无法保证任何子对象或父对象的状态。其中一些可能在调用析构函数时调用了它们的Dispose逻辑。
我建议你在你的类上放一个显式的Save方法,并在OnStop期间调用它。没有理由隐藏析构函数中的保存,并隐藏阅读代码的人的副作用。