日期:2014-05-18  浏览次数:20986 次

问个内部缓冲区设置的问题:我将10M后,没有恢复为8KB,操作系统的内存立刻上升到2GB多,系统慢得要死...

FileSystemWatcher fws = new FileSystemWatcher();

fws.InternalBufferSize = 10595760;


/*

我将10M后,没有恢复为8KB,操作系统的内存立刻上升到2GB多,系统慢得要死,

这是什么原因呢,是因为缓冲区过大,内存中的数据无法快速的交换或释放引起的吗?

之后恢复为8KB后自然就好,

fws.InternalBufferSize = 8192;

*/

------解决方案--------------------
From MSDN
InternalBufferSize 内部缓冲区的大小。默认值为 8192 (8K)。 
备注
缓冲区可以设置为大于 4096 (4K) 的任何值,但为获得最佳性能,在基于 Intel 的计算机上应设置为 4K 的倍数。

系统通知组件文件发生更改,并在组件创建并传递给 Win32 应用程序编程接口 (API) 的缓冲区中存储这些更改。如果短时间内有很多更改,则缓冲区可能会溢出。这将导致组件失去对目录更改的跟踪,并且它将只提供一般性通知。增加缓冲区大小会有下列结果:

增加缓冲区大小可以防止丢失文件系统更改事件。请注意,由于 Windows 操作系统的依赖项,当丢失某个事件或超出缓冲区大小时,FileSystemWatcher 类的实例不会引发 Error 事件。 

增加缓冲区大小的开销较大,因为它来自无法换出到磁盘的非分页内存,所以将缓冲区保持得越小越好。若要避免缓冲区溢出,请使用 NotifyFilter 和 IncludeSubdirectories 属性筛选掉不想要的更改通知。