System.IO.FileSystemWatcher 的底层是如何工作的?

2023-12-08

我想了解 System.IO.FileSystemWatcher 在幕后是如何工作的?因为我有一个要求,我需要查看 100 个或更多文件夹下的所有文件,其中每个文件夹将包含大约 1K 个文件。

我不确定我是否使用 FileSystemwatcher 是否会创建许多线程来监视这些文件,这会影响我的应用程序的性能?那么您能否让我知道 System.IO.FileSystemWatcher 在幕后究竟是如何工作的,或者它是否在内部使用线程来监视这些目录?


内部FileSystemWatcher使用Windows APIReadDirectoryChangesW函数(从FileSystemWatcher参考来源)。底层实现ReadDirectoryChangesW没有记录,但回答了您的具体问题是否FileSystemWatcher创建单独的线程来监视文件,因此答案是否定的。

然而,值得强调的是remarks on FileSystemWatcher在文档中,考虑到您的目录包含许多文件:

Windows 操作系统通知您的组件由 FileSystemWatcher 创建的缓冲区中的文件更改。如果短时间内发生多次变化,缓冲区可能会溢出。这会导致组件失去对目录中更改的跟踪,并且它只会提供全面通知。使用 InternalBufferSize 属性增加缓冲区大小的成本很高,因为它来自无法换出到磁盘的非分页内存,因此请保持缓冲区足够小但足够大,以免错过任何文件更改事件。为了避免缓冲区溢出,请使用 NotifyFilter 和 IncludeSubdirectories 属性,以便您可以过滤掉不需要的更改通知。

从中可以得出两个结论:

  1. 与许多FileSystemWatcher例如,将创建许多缓冲区来存储更改事件,并且这些缓冲区是从非分页内存分配的,这是一种有限的资源。
  2. 如果您正在监视的目录中发生大量更改,您可能会错过事件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

System.IO.FileSystemWatcher 的底层是如何工作的? 的相关文章

  • TRACKER:错误TRK0005:无法找到:“CL.exe”。该系统找不到指定的文件

    我尝试在 Windows 8 上的 Node js 项目中执行以下命令 npm 安装 电子邮件受保护 cdn cgi l email protection 但我收到一个错误 我不知道如何处理 TRACKER 错误TRK0005 无法找到 C
  • 生成 .tail IL 指令的简单 F# 代码是什么?

    我想看看 tailIL 指令 但我一直在编写的使用尾部调用的简单递归函数显然已优化为循环 我实际上是在猜测这一点 因为我不完全确定反射器中的循环是什么样的 我绝对没有看到任何 tail不过操作码 我在项目的属性中检查了 生成尾部调用 我还尝
  • 有没有办法设置 log4net 内存附加程序可以包含的最大错误消息数?

    我想向根记录器添加一个内存附加程序 以便我可以连接到应用程序并获取最后 10 个事件 我只想保留最后 10 个 我担心这个附加程序会消耗太多内存 该应用程序设计为 24 7 运行 或者还有别的办法吗 您需要创建一个自定义附加程序来存储有限数
  • 读/写带有特殊字符的.txt文件

    I open Notepad Windows 并写 Some lines with special characters Special 并前往另存为 someFile txt 与Encoding set to UTF 8 在Java中我有
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标
  • 元素属性语法和属性属性语法之间有语义差异吗?

    我认为元素属性语法和属性属性语法在语义上没有太大区别 但是 我发现一定有什么不同 例如 下面的例子只是演示了一个简单的触发器
  • 反序列化嵌套类时不需要 xmlns=''

    我在尝试在服务器上序列化类 将其发送到客户端并在目标上反序列化时遇到问题 在服务器上我有以下两个类 XmlRoot StatusUpdate public class GameStatusUpdate public GameStatusUp
  • npm package.json bin 无法在 Windows 上运行

    我正在尝试通过 package json 启动我的 cli 工具bin财产 我有以下内容 name mycli bin bin mycli 当我在包路径中打开 cmd 并输入 mycli 时 它表示该命令无法识别 我应该运行 npm 命令吗
  • 当用户打开文件时如何锁定对文件的访问?

    我正在编写一个 C NET 程序 该程序使用 XmlSerializer 对当前用户正在处理的项目与 XML 文件进行序列化和反序列化 这工作正常 但我试图找到一种方法来防止两个用户从网络驱动器打开同一个文件并让一个用户覆盖前一个用户的保存
  • WCF 服务调用包装器

    为 WCF 服务调用创建包装器的最佳实践是什么 我认为有必要 为了在同一个地方监视所有呼叫 我正在考虑使用这种代码 这是正确的想法吗 RetType t ServiceExecutionContext
  • 确定哪个进程锁定了文件

    我有一个在本地运行良好的单元测试 但上传到 TeamCity 构建服务器时失败 并显示 该进程无法访问该文件 因为它正在被另一个进程使用 在我在测试中做任何事情之前 我检查设置是否有文件 存在 如果存在尝试删除它 这会失败并出现相同的错误
  • 为使用 SSH.NET SshClient.CreateShellStream 执行的命令 (sudo/su) 提供子命令

    我正在尝试使用 Renci SSH NET 从 C Web 应用程序连接到远程 Linux 服务器并执行 shell 脚本 我想一个接一个地运行脚本 但不知道如何运行脚本并读取输出并将其存储在标签中 我已经尝试了下面的代码 但无法一行接一行
  • Android 手机作为 GSM 调制解调器在 PC 上发送/接收短信?

    是否可以将 Android 移动设备用作 PC 上的 GSM 调制解调器 我正在 net下开发应用程序来发送 接收短信等 现在我想通过 USB 将我的 Android 设备连接到我的 PC 并将其用作 GSM 调制解调器来与其通信 这里是参
  • 从 Powershell 脚本安装 Python

    当以管理员身份从 PowerShell 命令行运行以下命令时 可以在 Windows 11 上成功安装 Python c temp python 3 11 4 amd64 exe quiet InstallAllUsers 0 Instal
  • 如何在加载.NET WinForm应用程序user.config文件时捕获异常?

    有时 在使用默认配置系统的 NET 2 0 WinForm 桌面应用程序中 user config文件将被损坏并且无法再加载 当配置系统尝试加载它时 它会抛出一个System Xml XmlException 抛开 为什么文件首先被损坏 的
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 如果我使用客户端计算机上未安装的字体,会发生什么情况?

    有人可以告诉我 如果我在 WinForms 应用程序中使用目标计算机上不可用的字体 会发生什么情况 它是否使用同一系列的字体 只是 Sans Serif 还是其他字体 您的应用程序将回退到 Segoe UI Tahoma 然后是 MS Sa
  • 从 Excel 应用程序对象中查找位数(32 位/64 位)?

    是否可以从 Microsoft Office Interop Excel ApplicationClass 确定 Excel 是以 32 位还是 64 位运行 Edit该解决方案应该适用于 Excel 2010 和 Excel 2007 此
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com

随机推荐

  • 使用 HTML 和 PHP 将表单数据发送到电子邮件

    就像标题所说 将表格发送到我的电子邮件 我没有收到任何错误 但电子邮件从未收到 这是我的 HTML 表单 我认为您不需要任何其他内容 但文件中还有一些格式设置和 Java 验证
  • 为什么 {.tabset} 不能与 htmltools::tagList 一起使用?

    内容看起来不错 只是有一些没有选项卡的 正常 部分 我也尝试过 Use cat paste0 Number i tabset n 代替htmltools h3 寻找可能的参数tabset TRUE in htmltools h3 最小可重现
  • 如何阻止向联系人拨出电话和短信(防止酒后拨号)

    我正在为一门课程制作一个 Android 应用程序 以防止用户在喝醉时打电话或发短信 基本上 在他们开始喝酒之前 他们会启动应用程序 该应用程序会阻止所有给他们的联系人打出的电话和短信 直到他们回答数学问题以证明他们的清醒 我在尝试阻止呼叫
  • 编辑已编译程序集的 C# 资源文件

    我有一个资源文件 我在其中存储类库的连接字符串等 我不能使用 App config 不要问为什么 我的假设 可能是一个愚蠢的假设 是 我能够在运行时修改已编译程序集之外的 rex 文件 以便能够通过环境更改连接字符串 而无需每次重新编译程序
  • 尝试将二进制文件读取为文本,但扫描仪停在第一行

    我正在尝试读取二进制文件 但我的程序只是停在第一行 我认为这是因为该文件具有奇怪的字符 我只想从中提取一些指示 有没有办法做到这一点 public static void main String args throws IOExceptio
  • Rails JavaScript 视图在生产环境中不起作用

    我的 Rails 应用程序遇到无法解释的问题 我在应用程序的所有部分都使用了大量 JavaScript 在开发中一切工作正常 但在生产中似乎我的 javascript 中的代码views没有被执行 这特别奇怪 因为页面上的所有其他 Java
  • 是否有使用 PDO 关闭 mysql 准备好的语句的函数?

    在 mysqli 准备好的语句中有mysqli stmt close 关闭准备好的声明 stmt gt close 我搜索了 php net 和网络 但找不到 PDO 的替代品 这可能吗 在每个脚本的末尾使用它有什么好处 我明白那个 con
  • 在 XCODE 中检查互联网连接时如何返回 BOOL

    我希望能够在加载视图时检查互联网连接 预先确定我的观点的内容 我有以下 viewDidLoad 方法 void viewDidLoad super viewDidLoad if self hasInternetConnection NSLo
  • 路由错误:url 中的用户名

    我有一个关于 Rails 3 的问题 我想让我的用户控制器显示页面具有 app com people username url Route resources users match people username gt users sho
  • MySQL 搜索并用通配符替换 - 查询

    是否可以在使用通配符的同时执行 MySQL 搜索和替换 eg search id wildcard houselisting rental gt replace class house rentals gt query UPDATE tab
  • 可达性网络更改事件未触发

    我的 iPhone 应用程序非常简单 只有一个视图可以处理所有事情 在 viewDidLoad 中我检查是否有互联网连接 如果有 我们从网络加载 如果没有 我们从本地资源加载 这很好用 in viewDidOnload NSNotifica
  • 我可以使用类助手调用静态私有类方法吗?

    我特别觉得有必要TCharacter IsLatin1这是private type TCharacterHelper class helper for TCharacter public class function IsLatin1 C
  • JavaFX 2 StringProperty 在封闭方法返回之前不会更新字段

    我想更新 JavaFX 应用程序中的标签 以便文本在方法运行时多次更改 private void analyze labelString setValue Analyzing labelString is bound to the Labe
  • 禁用 wpf 窗口上的鼠标事件以及放置在其上的用户控件

    我有一个 wpf 窗口 上面有许多用户控件 我应该使用哪个事件 函数来限制主窗口上的鼠标输入以及它所托管的用户控件 Try the UIElement IsHitTestVisible财产
  • CSS 将比例转换为背景图像

    我很喜欢 CSS 部分对图像的影响 split banner right cl hover img webkit transform scale 1 1 transform scale 1 1 我需要将上面的 CSS 应用到 div 元素中
  • MongoDB - 使用聚合管道进行评论赞成/反对

    我正在尝试实现评论的赞成 反对机制 类似于 reddit 上的赞成 反对机制 我有一个单独的集合 名为commentReputation里面的文档可以是这样的 id ObjectId 5e5acb6d6034a879655c8819 com
  • 如何打开;另存为;然后从 PowerShell4 关闭 Excel 2013(启用宏)工作簿

    对上述 Com 操作进行搜索会产生 09 年甚至更早的链接 也许它没有改变 但我发现自己遇到了 它正在被另一个进程使用 的错误 即使我的桌面上没有打开 Excel 应用程序 我必须重新启动才能恢复 需要明确的是 我正在尝试打开一个现有文件
  • Heroku 应用程序启动超时

    我有一个相当大的 2 3 升级到 Rails 3 应用程序 它足够厚 无法通过 Heroku 的 60 秒启动门 因此它崩溃了 我已经做了很多工作来最大限度地减少 Gems 和初始化程序中的加载时间 但是有一些随机过程会消耗时间 而且我不太
  • C 解读声明

    好吧 这对我来说有点太多了 您如何阅读这些声明 char myCBT 10 请注意 我并不是专门要求提供这个示例 而是要求像我这样的初学者面临这样的难题时的一般经验法则 使用大卫 安德森的顺时针螺旋规则用于阅读此类符号
  • System.IO.FileSystemWatcher 的底层是如何工作的?

    我想了解 System IO FileSystemWatcher 在幕后是如何工作的 因为我有一个要求 我需要查看 100 个或更多文件夹下的所有文件 其中每个文件夹将包含大约 1K 个文件 我不确定我是否使用 FileSystemwatc