当前位置: 首页 > 编程语言 > C#

FileSystemWatcherInternalBufferOverflow分享

时间:2023-04-11 02:19:59 C#

FileSystemWatcherInternalBufferOverflow当我尝试监视网络路径(DFS-分布式文件系统)上的文件夹时,出现异常System.IO.Internal.BufferOverflowException:一对多更改。当FileSystemWatcher监视不使用此文件系统的本地/网络路径时,它工作正常。我能够从本地路径上的1000多个文件中获取一个事件并且我没有得到BufferOverflowexception,但是当我将文件复制到DFS上的一个文件夹时,我什至无法从一个文件中获取一个事件(到澄清这一点,我得到了错误事件......)。我试过设置:fileSystemWatcher.InternalBufferSize=65536;我不确定这是否对您有帮助,但路径看起来像这样:\corpnetcloud\NetworktestFoldermyFolderToMonitor编辑:1我不知道为什么路径中有两个双斜杠。我可以毫无问题地监控文件夹,直至公司网云路径。一旦我尝试监视任何起始文件夹,我就会收到错误...\Network...感谢您提供的任何提示。谢谢当然,一下子改太多,火的问题。您已将缓冲区大小增加到允许的最大值,Windows不允许更大的缓冲区大小。它分配在“珍贵”的内存中,即内核内存池。这可能是一个高度活跃的文件服务器,但更多时候这是由代码中的问题引起的。你不能快速从消防水带喝水。您的事件处理程序必须尽快返回,以便足够快地清空缓冲区并跟上文件服务器上的更改速度。这通常是笨手笨脚的,典型的实现会做一些不明智的事情,比如复制文件、读取文件、循环直到文件可以打开。昂贵的东西,循环错误是一个非常常见的错误,当事件触发时文件很少可用,因为任何更改文件的应用程序仍然打开它。它可以无限期地锁定文件。显然,这总是会导致缓冲区溢出。因此,一个正确实现的FileSystemWatcher事件处理程序,除了快速将传递的文件路径放入线程安全队列中之外什么都不做,并且不做任何其他事情,应该永远不会超过一微秒。并使用另一个线程再次尝试清除该队列,处理无法打开文件的可能性。我遇到了同样的问题。查看本地文件夹并毫无问题地删除了5个新文件。但是,当我查看网络文件夹时,出现错误“一次目录中的更改太多”。它只有5个文件。你找到解决办法了吗?我无法真正调整代码,所以我的临时修复是将文件放在一个临时文件夹中并轮询该文件夹。当有新文件时,我会延迟500ms单独移动它们。以上就是C#学习教程:FileSystemWatcherInternalBufferOverflow分享的全部内容。收藏不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: