【发布时间】:2013-01-16 20:29:52
【问题描述】:
这不是直接关于代码的问题,而是 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;毫无疑问:所有补丁,操作系统也是]
[编辑]
对不起,我的分析有问题....连同我的移动 app 到 Server 2008,一个新的 app 来到了要监控的文件集 [Change 永远不要同时做两件事....]。新应用程序有另一种行为, 然后是我以前读过的日志的应用程序......
(1)旧应用使用:打开/追加、写入、关闭。
(2)新应用使用:打开/创建、写入、休眠、写入、休眠、写入、关闭。
FSW 为我提供了旧应用程序行为的更改事件,但没有 对于新的。 FSW Notifyfilters.Size 不像我那样工作 预期的。因此,无法使用 FSW 监控新应用程序的日志。 我发现没有解决方法可以使 chnaged 事件触发大小更改 一个人。
但这仍然是:这是 Windows Server 2008 ! Windows Server 2003 和 带有单声道的 Linux 甚至为您提供了 (2) 的更改事件!!!!!!!所以, 我的“头衔”还不错;-)
现在对 .Net 不满意 ....
如果有人可能有想法,请现在告诉我!!
对于我第一次草率的分析感到抱歉... ;-)
br, ++马布拉
【问题讨论】:
-
我们迁移到新服务器的应用程序发生了这种情况。你有没有解决这个问题?