0

FileSystemWatcher 클래스를 사용하여 파일/디렉토리를 변경하면 매우 많은 메모리를 사용하는지 궁금합니다. 저 성능 컴퓨터에서 백그라운드에서 지속적으로 실행되는 C#으로 데스크톱 응용 프로그램을 개발 중이며 다양한 파일이 변경되었는지 확인하는 방법이 필요합니다. 몇 가지 해결책을 생각해 볼 수 있습니다 :변경 사항을 파일로 보거나 중복으로 파일을 쿼리하는 것이 더 효율적입니까?

  1. FileSystemWatcher를 사용하여 디렉토리를보십시오.
  2. 간격을두고 수동으로 확인하는 간격으로 시간 초과 스레드를 실행하십시오.
  3. 액션 핸들러 스레드가 실행될 때마다 수동으로 확인하십시오 (프로그램은 가끔 액션에서 뭔가를합니다).

의견이 있으십니까?

감사합니다.

badPanda

+0

추가 : 기본 (많은 문제가 발생하지는 않지만) 리소스로드와 피크 리소스로드를 최소화해야합니다. – badpanda

답변

6

이벤트 기반 항상 새 스레드 동일하거나 산란을 사용하여 폴링보다 더 효율적이다, 그래서은 FileSystemWatcher를 사용할 수있는 권리 좋습니다. 델리게이트를 사용하는 프로그래밍 모델은 내 의견으로는 더 우아합니다.

+1

사실,하지만 FileSystemWatcher를 사용할 때 일부 이벤트가 누락 될 수 있음을 잊지 마십시오 (http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx 참조). "변경 사항이 많은 경우 짧은 시간에 버퍼가 넘칠 수 있습니다. "). 무엇이든 놓치지 않으려면 낮은 폴링을해야합니다. –

+0

또한 코드에서이 오버플로 동작을 방지 할 방법이 없습니다. 이것은 작성하는 FileSystemWatcher의 속성과는 전혀 관계가없는 버퍼입니다. 짧은 시간에 많은 변경이 있었지만 (150 개의 파일 붙여 넣기/사본으로는 거의 볼 수 없었 음) 이벤트가 누락되었다는 알림없이 누락 된 이벤트가 발생합니다. – Joe

+0

흠. 나는 버퍼 오버 플로우 문제를 알고 있고 두 가지 이유에 관심이 없다 : 첫 번째는이 디렉토리에 대한 150 개 이상의 변경 가능성이 매우 적다는 것이다 (나는 1 년에 1 번 시나리오라고 말한다). 두 번째는 변경이 발생했음을인지하기 만하면되는 코드를 작성한 것입니다. 버퍼 오버 플로우가 처리되는 한 결과의 더 많은 필터링이 필요합니다. 문제가 될 것이라고는 생각하지 않습니다. – badpanda

3

필자는 FileSystemWatcher 클래스를 사용하여 성능 문제가없는 수백 개의 디렉토리에서 * .txt 파일 변경 사항을 관찰했습니다. 그래서 나는 그것이 최선의 해결책이라고 생각합니다.

2

FileSystemWatcher으로 가고 싶습니다. 그것은이 물체가하도록 설계된 것입니다. 그것은 개발되어 널리 사용되고 있습니다. 귀하가 작성한 모든 것은 테스트 및 최적화의 정밀 검사를받지 않습니다. 할 필요가 없을 때 휠을 다시 발명 할 이유가 없습니다.

+0

FileSystemWatcher가 항상 작동하지 않으며 피할 수없는 점을 제외하면 다음과 같습니다. http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/4465cafb-f4ed-434f-89d8-c85ced6ffaa8 – Joe

1

저는 현재 (전국 규모)에서 일하고있는 대규모 파일 전송 프로젝트에서 FileSystemWatcher는 (파일 잠금, 이벤트 대기열에 대한 관리와 함께) 편도 옵션이었습니다. 근본적인 OS 구조 (이 모든 이벤트 기반 상호 작용 제공)를 사용할 때 많은 이점이 있습니다. 그렇게하지 않으면 효율적인 동작을 얻을 수 있다고 생각하지 않습니다.

1

나는 프로그램이 포커스를 되 찾을 때마다 파일/디렉토리를 수동으로 검사하여 변경 사항을 확인했다. 프로그램이 몇 가지 요구 사항을 충족하는 경우에 적합 할 수 있습니다 :

  1. 그것은 일반적인 프로그램이 비활성화하는 (즉,이 상태에서 불필요한 파일의 변경 사항에 대해 알고있는 경우) 오랜 기간 동안.
  2. 프로그램이 활성화되어있는 동안에는 파일/디렉토리가 변경되지 않을 수도 있습니다 (알림이 필요없는 프로그램 자체는 제외).
  3. 소수의 파일에만 관심이 있습니다.

그래도 그렇다고해도 FileSystemWatcher은 괜찮습니다.