C# FileSystemWatcher和系统内存不足异常

C# FileSystemWatcher和系统内存不足异常,c#,wpf,C#,Wpf,一点背景 有一个基于wpf的应用程序,我让它打开了2-3天,没有执行任何活动抛出内存异常,这是一个非常奇怪的情况,并非总是发生。在这个理想的活动中,我的应用程序不执行任何活动,只是一个文件系统观察器持续监视一个共享位置,所以我认为这会是一个问题,但我不确定。任何建议都是受欢迎的 当FileSystemWatcher事件发生时,是否正在向列表\集合添加内容?你可以直接这样做,如果不明显的话,更可能是间接的 这可能最终导致OOM,这取决于发生了多少事件,因此到达OOM所需的时间可能会有很大的变化 F

一点背景

有一个基于wpf的应用程序,我让它打开了2-3天,没有执行任何活动抛出内存异常,这是一个非常奇怪的情况,并非总是发生。在这个理想的活动中,我的应用程序不执行任何活动,只是一个文件系统观察器持续监视一个共享位置,所以我认为这会是一个问题,但我不确定。任何建议都是受欢迎的


当FileSystemWatcher事件发生时,是否正在向列表\集合添加内容?你可以直接这样做,如果不明显的话,更可能是间接的

这可能最终导致OOM,这取决于发生了多少事件,因此到达OOM所需的时间可能会有很大的变化

FileSystemWatcher本身不会导致OOM。它维护一个缓冲区,但如果文件系统事件数据没有通过FSW事件足够快地获取,它将覆盖缓冲区

因此,不,FileSystemWatcher本身不会导致OOM—内部缓冲机制通过设计消除了这种可能性。

windbg
(Windows SDK中包含的Windows调试器工具中的调试器。现在它本身包含在VS中)包括一个命令,用于在托管堆上转储统计信息。包括分配的类型。这将有助于确定哪些对象未被收集(可能通过一些应清除的引用)


这应该让您开始:

如果不查看代码,很难找到内存泄漏:(,不幸的是,我不在我的办公网络上!你能提供堆栈跟踪吗?我知道,很难找到,它可能是应用程序的任何区域,但我的问题是,如果filesystemwatcher只是监视一个碎片位置,并且如果应用程序被打开2-3天或其他时间框架,我会尝试要发布一些堆栈跟踪,但可能需要一些时间,可能是在7-8 hrsno之后,不只是观察更改,如果更改存在,则写入文件,很少更改到FSW所在的位置watching@Saurabh我已经更新了我的问题是对您的问题评论的回应。FSW不会自行OOM,它旨在覆盖它s internal buffer-这是一项设计功能,可防止其占用太多内存。@Saurabh可能我不理解您的评论,但您是否正在向正在监视的文件写入内容?听起来可能会出现反馈循环。此外,您可能会得到比您想象的更多的更改。添加一些日志记录以彻底解决此问题。