【问题标题】:FileSystemWatcher performanceFileSystemWatcher 性能
【发布时间】:2020-04-29 21:41:37
【问题描述】:

我需要在创建某个文件时触发一个事件。但是这个文件是在用它创建的目录内的 Temp 文件夹中创建的。因此,我将不得不设置对所有子目录的整个 Temp 目录的监视,并且我担心性能影响。

我知道文件的确切名称和路径,只需要跟踪它的创建。每秒轮询一次File.Exists 还是设置FileSystemWatcher 更好?也许有一种方法可以禁用对除文件创建之外的所有事件的监视,并且可能会比轮询更快?

我无法真正测试它,因为 Temp 目录的使用模式非常难以预测。

【问题讨论】:

  • I can't really test it because usage pattern of Temp directory is quite unpredictable. 如果这是真的,那么无法测试使用多个任务/线程的代码......

标签: c# windows


【解决方案1】:

我不明白。为什么必须设置“监视”整个临时目录?而不仅仅是该文件所在的文件夹?

我知道文件的确切名称和路径

谷歌:Use FileSystemWatcher on a single file in C#

这可能比每 x 次轮询一次具有更好的性能。

但是,我读过,甚至发生在我身上,FSW 并不是 100% 可靠的。

所以我会想到两种方法:

1) 混合使用 FSW、投票和用户干预(即刷新按钮)

2) 获取一些好药并阅读以下内容:System Minifilter Driver https://msdn.microsoft.com/en-us/library/windows/hardware/ff540402%28v=vs.85%29.aspx

编辑:新链接: https://docs.microsoft.com/en-us/windows-hardware/drivers/ifs/filter-manager-concepts 还有一个不错的代码示例:https://github.com/microsoft/Windows-driver-samples/tree/master/filesys/miniFilter/change

【讨论】:

  • 因为程序启动时路径不存在。有时会在 Temp 中创建一个目录。一段时间后,里面又多了一个目录。然后过一段时间就会出现目标文件。
  • 如果你知道它什么时候出现,那么你可以做#1,即使知道FSW不是那么可靠。
  • @JuanCarlos 不幸的是,第二点的链接已损坏。
  • 你好@JuanCarlos!没想到在这里见到你:D
  • 嘿@MuhammadAzeez 我很有名xD
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多