FileSystemWatcher 클래스를 사용하는 프로그램이 있습니다. 폴더의 각 하위 폴더에 새 FileSystemWatcher를 추가하면 각 FileSystemWatcher가 8KB의 메모리를 사용합니다.처분 후 FileSystemWatcher가 메모리를 차지합니까?
FileSystemWatchers는 "watcher"목록에 추가됩니다. 여기에서 수천 개가 될 수 있습니다.
나는 어떤 메모리가 RAM에서 해방되지 않는 방법
watchers.ForEach(x => x.Dispose());
나는 (그들이 한 함) 중지 그들 모두를 예상 부르지 만 합니다.
어떻게 해결할 수 있습니까? 당신이 그들에게 목록에서 참조를 만든, 그래서이 목록은 "살아"있는 동안 가비지 컬렉터가 여유 메모리 전문가에 의해 수행 할 수 있습니다 - 당신이 목록에있는 모든 전문가를 배치 한
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
watchers.ForEach(x => x.Dispose());
watchers.Clear();
}
disposed = true;
}
}
[IncludeSubdirectories'] (https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.includesubdirectories (v = vs.110) .aspx) 하위보기 폴더를 만들지 않고 많은 전문가를 생성 할 수 있습니까? – shahkalpesh
'Dispose'는 관리되지 않는 리소스를 해제하지만 관리되는 메모리는 해제하지 않습니다. –
IncludeSubdirectories가 처음 시도되었지만 "이동"이 많으면 버퍼가 충분히 크지 않아 더 작은 관찰자를 만드는 것이 더 좋습니다. –