0

我想登录一个每 1 小时运行一次的 Windows 服务。我Parallel.ForEach在我的 Windows 服务中使用。我正在使用 AdoNetAppender 登录我的 sqlserver 数据库。

ILog _log = LogManager.GetLogger(typeof(EmailJob));

上面一行的意思是,我们使用的是静态实例来登录数据库,对吧?在 AdoNetAppender 中如何保持连接?当我的 Windows 服务完成第一次迭代时,AdoNetAppender 的连接状态将是什么。它是立即关闭还是等待垃圾收集器处理?当下一次迭代开始时,它会打开一个新的连接吗?

由于我的 Windows 服务一直在运行,如果垃圾收集器需要很长时间来处理对象,打开的连接数将超过 SQL Server 的最大打开连接数限制。我需要在迭代结束时关闭连接并在迭代开始时打开连接。该怎么办?

4

1 回答 1

1

您的示例中的代码行不是静态日志变量,您想知道 GC 将如何收集您的变量。仅当不再有对该对象的引用时才会这样做。除此之外,您对 AdoNetAppender 的内部工作做了很多假设。您的连接在 AdoNetAppender 中维护,但是它使用缓冲区并且仅在缓冲区已满时写入。连接管理由您在连接字符串中引用的驱动程序完成,您不必担心它是打开还是关闭。通常,只有当您遇到由记录器引起的具体问题时,您才应该担心这一点。那么,您认为记录器的哪些症状会导致您出现任何问题?

于 2016-08-30T14:46:39.490 回答