2012-12-05 103 views
1

我有一個應用程序,其中有一個TimerFileSystemWatcher用於批處理每5分鐘更改的文件。已更改文件的批處理

FileSystemWatcher在更改文件時會引發事件,並且只有在檢查隊列中是否存在文件路徑後,纔會將文件路徑添加到Queue

Timer滴答時,它遍歷隊列,彈出每個項目並處理它;直到隊列爲空。

我的問題是:

  • 上午我試圖正確地解決這個問題,並使用正確的數據類型?
  • 我需要擔心Queue的併發訪問嗎?如果是這樣,我該如何處理?

回答

1

編輯: 問題1:我認爲方法和對象,你正在使用的文件的批處理是合適的,因爲我看到的。注意:處理更改的時間間隔應該足夠公平,以便不會遇到任何文件鎖定問題或類似問題。

問題2:如果從同一實例訪問隊列,那麼我看不到任何問題。如果您正在通過不同的線程訪問它,則通常會遇到與集合有關的鎖定問題,在此情況並非如此。如果計時器滴答在該FileSystemWatcher的增加了,同時「會發生什麼:Concurrent Collection types

你的問題 -

話又說回來,如果你遇到的行列通路和線程安全這個問題,要麼擔心,我會建議使用更改文件?「 - 對這個問題的回答是 - 「你不會得到任何異常或錯誤,並且文件更改添加項目將在下一個計時器滴答處處理。」

+0

我不明白答案1的第一個陳述,或者您的答案2是什麼意思 - 請您擴展。如果'Timer'在與FileSystemWatcher添加更改文件的同時發生了什麼? – Cheetah

+0

編輯我的答案來說清楚。 – Jsinh

+0

鑑於我現在已經瞭解Timers過去並且FileSystemWatchers在線程池中的任何線程上通知,可能會有一些需要處理的併發編輯。 – Cheetah