这不是直接关于代码的问题,而是 FileSystemWatcher/OS 行为。我有一个应用程序,它监控成千上万的日志文件。该应用程序运行多年,没有任何问题。它在 Server 2003 上针对托管在 Server 2003 上的共享运行。
如果它在 Server 2008 (R2) 上运行并且存储在 Server 2008 (R2) 上,则不会生成太多事件。我做了一个简单的复制来显示差异[但正如我所说:长期运行的旧 proggi 确实可以正常工作]。生成日志的应用程序不在我的代码控制之下。在我的重现中——用暂停写这样的日志——即使是对作者和/或底层流的刷新也无济于事]。
在 Server 2003 上,每次更新 [来自日志应用程序的写入操作] 都会导致 FSW 触发大小更改事件。在 Server 2008 上,仅当应用程序开始写入日志文件并且日志文件关闭时才会发生这种情况。中间没有任何事件了。将 REG 键设置为写入 NTFS 时间戳不会改变此行为。
我无法在 MS 打电话,但可能有人已经看到这种行为并且知道解决方法。
我想到的解决方法是:降级到 Server 2003 或 Linux。两者都按预期工作。
任何想法都非常受欢迎。
此致,
++马布拉
[净 2.0 => 4.0; 毫无疑问:所有补丁,操作系统也]
[编辑]
抱歉,我的分析中有错误....随着我的应用程序移至 Server 2008,一个新的应用程序进入了要监视的文件集[永远不要同时更改两件事....]。新应用程序有另一种行为,然后是我以前读过的日志的应用程序....
(1)旧应用程序使用:打开/追加、写入、关闭。
(2)新应用使用:打开/创建、写入、休眠、写入、休眠、写入、关闭。
FSW 为我提供了旧应用程序行为的更改事件,但没有为新应用程序行为提供更改事件。FSW Notifyfilters.Size 不像我预期的那样工作。因此,无法使用 FSW 监控新应用程序的日志。我发现没有解决方法可以仅针对大小更改触发 chnaged 事件。
但这保持:Windows Server 2008 !Windows Server 2003 和带有单声道的 Linux 甚至为您提供了 (2) 的更改事件!!!!!!所以,我的“头衔”还不错;-)
现在对 .Net 不满意....
如果有人可能有想法,请现在告诉我!
并为我草率的第一次分析感到抱歉... ;-)
兄弟,++马布拉