2010-12-15 25 views
5

Tôi đang sử dụng FileSystemWatcher để giám sát thư mục A. nếu một tập tin được tạo ra hoặc sao chép vào thư mục đó, nó sẽ được chuyển đến thư mục B.FileSystemWatcher không thành công với 1.000 tác phẩm sáng tạo

Tôi tạo ra một tập tin trong thư mục A bằng nhấp chuột phải, chọn "Mới", chọn "Tài liệu văn bản". Tệp được chuyển đến thư mục B ngay lập tức. Nhưng nếu tôi sử dụng một chương trình để tạo 1000 tệp vào thư mục A thì chúng không được chuyển vào thư mục B. Vì có vẻ như FileSystemWatcher không thể phát hiện 1000 tệp được tạo bởi chương trình.

Có ai có thể giải thích điều này cho tôi không?

Trả lời

15

Dường như 1000 tệp sẽ tràn bộ đệm của FileSystemWatcher. Tuyệt vời explanation here.

liên kết Trích:

kích thước bộ đệm và các lỗi Sự kiện

Các FileSystemWatcher lớp tác phẩm của chụp tất cả các tập tin có liên quan và thay đổi cũ và đặt chúng vào một bộ đệm . Điều này sau đó được xử lý một lần thay đổi cùng một lúc cho đến khi tất cả các thông báo đã được xử lý và bộ đệm trống. Theo mặc định, bộ đệm trong có kích thước tám kilobyte (8192 byte). Mỗi sự kiện có thể mất tối đa mười sáu byte của bộ đệm cho dữ liệu của nó, không bao gồm tên tệp . Điều này có nghĩa là khi có nhiều thay đổi trong khoảng thời gian ngắn là thời gian, bộ đệm có thể nhanh chóng trở thành bị quá tải và thông báo có thể bị mất .

Xử lý sự kiện lỗi thích hợp từ FileSystemWatcher sẽ cho phép bạn mã hóa khả năng này. Ví dụ. Kiểm tra và/hoặc hoạt động trên thư mục của sự kiện lỗi với logic của riêng bạn ...

+0

Cảm ơn Paul, bạn đã đúng. Sau khi tôi tăng kích thước bộ đệm thì chương trình của tôi thực thi thành công. – Linh

Các vấn đề liên quan