首页 / C# / c# – 静态解构器
c# – 静态解构器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 静态解构器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1378字,纯文字阅读大概需要2分钟。
内容图文
![c# – 静态解构器](/upload/InfoBanner/zyjiaocheng/808/c4cf5abb1f2d4c109c6b888f18a0ea2e.jpg)
我在Web服务中实例化了类,在静态成员中,它保留了一些资源.如果我不是静态地持有这些资源,我可能会通过一些IDisposable对象访问它们,我可以在Dispose上释放资源.无论是否坚持这个会话是一个好主意,当一个类型被静态解构时,.NET是否提供任何方法来调用任何清理代码?
请不要回答这个问题,而是“停止在静态成员变量中保留资源”.我理解静态保留这些信息的缺点,并愿意接受后果(我们正在使用它来将处理时间从58小时减少到4小时,以便我们进行一些批处理).具体问题是:鉴于这种情况,无论如何我还能很好地清理这些资源吗?
编辑:
我知道该类将继续用于剩余的进程,但是使用静态构造函数.NET可以让您在将该类型加载到内存时执行某些操作.你能在另一端做点什么吗?
解决方法:
实际上没有办法从托管代码中执行此操作.你想要的是处理卸载的程序集,但是在大多数情况下都不会发生这种情况.
更详细:
您可以处理AppDomain.DomainUnload事件(http://msdn.microsoft.com/en-us/library/system.appdomain.domainunload.aspx).这将处理您的应用程序域从其托管进程(例如ASP.NET)卸载的时间.
但是,如果您是EXE,或主机EXE正在回收,则不会引发此问题.如果设置正确,您可能能够处理本机DLL_PROCESS_DETACH并将其反弹回托管代码,但由于加载程序锁定,您必须非常小心从该上下文执行的操作(触发程序集加载的任何内容都将僵局).
您可以阅读此内容,了解有关清理工作的一些见解(提示:不多):http://blogs.msdn.com/b/oldnewthing/archive/2012/01/05/10253268.aspx
基本上,你唯一需要担心的是将缓冲区刷新到磁盘,如果你需要做更复杂的事情,你已经搞砸了. malloc(),因此new()可能会立即崩溃你的程序.这也适用于托管代码.
内容总结
以上是互联网集市为您收集整理的c# – 静态解构器全部内容,希望文章能够帮你解决c# – 静态解构器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。