【发布时间】:2013-07-19 20:27:59
【问题描述】:
我有一个 ASP.NET C# 单例(通过 HttpContext.Current.Session 限定为会话),它接收来自代码的消息(警告、错误、异常等)。这些消息与代码问题有关,主要在调试时使用,而不是在生产过程中。
我为此对象编写了自定义析构函数,以便将其内容作为文件写入/附加到磁盘上。
我想问与这种情况有关的两件事:
a] 在对象析构期间打开文件并写入文件是个好主意吗?并发IO访问是通过静态锁来处理的。
b] 什么时候为会话范围的对象调用析构函数?只有当会话在服务器上过期时?
【问题讨论】:
-
这听起来像是一个奇怪的定制解决方案。调查 ELMAH(很少的配置)............和 log4Net(一些基本的代码更改......但是“发布”代码已经创建......将您的消息发布到.. Sql Server到文本文件到许多其他选项............已经完成了。
-
我认为 Dispose 会更好 - msdn.microsoft.com/en-us/library/system.idisposable.aspx
-
析构函数实际上是
override void Finalize()方法。您无法控制何时调用它,GC 会在托管堆栈已满并且它位于其链表中的下一个时执行。 -
听起来您将所有消息都存储在内存中 (
List<string>?),并且仅在会话结束时将它们写出来。为什么不立即登录? -
@Corak 是的,谢谢,我也认为这是重构过程的一部分,我可能会这样做。当您在没有明确规范的情况下进行开发时,您可能知道它通常是怎样的。您不断添加功能,因为需求发生变化,然后在某些时候,您需要停止并重构整个类。以前我们不需要此对象写入磁盘日志。
标签: c# asp.net session singleton