고용량 시스템에서 파일 변경 시 고려 사항
업데이트: 2007년 11월
FileSystemWatcher 구성 요소는 특히 트래픽이 많은 디렉터리를 감시할 경우 많은 이벤트를 받을 수 있습니다. FileSystemWatcher 구성 요소는 관리할 수 있는 속도로만 이벤트 알림을 받을 수 있기 때문에 이로 인한 문제가 발생할 수 있습니다. 이벤트가 들어오는 속도가 구성 요소에서 이벤트를 받을 수 있는 속도를 초과하면 초과된 이벤트는 버퍼에 저장된 다음 구성 요소로 전달됩니다. 구성 요소에서는 버퍼의 각 엔트리를 사용자의 코드에서 발생하는 이벤트로 해석합니다. 이 버퍼는 오버플로가 발생할 수 있다는 점에서 문제가 될 수 있습니다. 디렉터리에서 버퍼에 모두 저장할 수 없을 정도로 많은 변경이 일어나면 운영 체제에서 "blanket" 알림이 발생하고 구성 요소에서 예외가 발생합니다.
![]() |
---|
악의적인 프로그램이 FileSystemWatcher 구성 요소가 모니터링하는 디렉터리에 대한 액세스를 얻어 이 구성 요소가 처리할 수 없을 정도의 많은 변경 내용을 생성할 경우 서비스 거부 공격이 발생할 수 있습니다. 이 도움말 페이지의 권장 사항을 따르고 액세스 제어 목록을 적절히 사용하여 서비스 거부 공격을 방지하십시오. |
이 문제를 피하려면 몇 가지 작업을 수행해야 합니다. 먼저, 수신할 이벤트와 거의 비슷한 크기로 버퍼를 설정해야 합니다. 기본으로 버퍼 크기는 4KB로 설정되어 있습니다. 4KB 버퍼는 디렉터리에서 약 80개 파일의 변경 내용을 추적할 수 있습니다. 각 이벤트는 버퍼에서 16바이트를 차지하며 이벤트가 발생한 파일의 이름을 유니코드(각 문자 당 2바이트)로 저장하는 추가 바이트가 있습니다. 이 정보를 사용하여 버퍼 크기를 필요에 맞게 조정할 수 있습니다.
속성 창에서 InternalBufferSize 속성을 설정하면 버퍼 크기를 다시 설정할 수 있습니다. Microsoft Windows 2000을 사용하는 경우 4KB 단위로 버퍼 크기를 늘릴 수 있습니다. 이 크기는 운영 체제의 기본 페이지 크기와 일치합니다. 다른 운영 체제를 사용하는 경우 해당 운영 체제의 기본 페이지 크기와 일치하는 단위로 버퍼 크기를 늘릴 수 있습니다.
![]() |
---|
사용하는 운영 체제의 기본 페이지 크기를 잘 모르는 경우 가장 안전한 방법은 원래의 버퍼 크기를 두 배로 늘리는 것입니다. 이렇게 하면 운영 체제에 필요한 원래의 간격을 유지할 수 있습니다. |
적절한 버퍼 크기를 설정하는 것과 함께 다음 세 가지 속성을 사용하여 버퍼가 수신하는 정보의 양을 제어할 수 있습니다.
NotifyFilter 속성을 사용하면 FileSystemWatcher 구성 요소로 하여금 모든 변경 내용을 찾도록 할 것인지 또는 감시하는 디렉터리 안에서 지정된 변경 내용만 찾도록 할 것인지를 지정할 수 있습니다.
IncludeSubdirectories 속성을 사용하면 감시하는 디렉터리의 하위 디렉터리를 포함할지 여부를 나타낼 수 있습니다. 이 기능을 사용하지 않는 경우에는 이 기능을 사용할 때보다 적은 이벤트를 받게 됩니다.
Changed 이벤트를 감시하도록 FileSystemWatcher 구성 요소를 설정한 경우 NotifyFilter 속성을 사용하여 필요한 이벤트만 지정할 수 있습니다.
참고:
Filter 속성을 사용하여 감시할 파일이나 하위 디렉터리를 지정할 수도 있지만, 이 속성은 버퍼에 변경이 추가된 후에 적용되므로 버퍼 크기가 전혀 줄어들지 않습니다. 대신 NotifyFilter 속성을 사용하면 버퍼에 기록되는 정보의 양을 제어할 수 있습니다.
참고 항목
작업
방법: FileSystemWatcher 구성 요소 인스턴스 구성