我必須解析很多文件。所以現在我打開一個閱讀文件來解析內容並將輸出寫入不同的位置。 這基本上就是我需要做的事情,但我希望能夠加速該過程,因爲我正在解析14000個文件。處理從BlockingCollection讀取的對象
我改進了我的算法,將工作分解爲多個線程。所以我有1個線程做25%的下一個25%的文件等等。
不管怎樣,我相信我會顯着提高性能和速度,如果我有:
Task 1
讀取文件,並將該文件的內容在BlockingCollection1
(內存)Task 2
會創建多個線程解析BlockingCollection1
的內容並將解析的數據放置在BlockingCollection2
Task 3
從BlockingCollection2
中讀取內容並將其寫入磁盤。
我現在的問題是,我得到一個內存不足的例外。我想讓垃圾收集器從BlockingCollection1中刪除項目,如果它們已被使用。如果它們已寫入磁盤,我也希望從BlockingCollection2
中刪除項目。
使用BlockingCollection<T>
非常方便,因爲一個線程可以將項目添加到該集合,而另一個線程可以處理這些項目。在我使用鏈表之前,我傾向於這個問題:https://stackoverflow.com/a/12519345/637142如何評論和有用的BlockingCollection可以。 反正我怎麼能解決這個問題?我是否必須使用不同類型的集合,如堆棧?
如果您使用'GetConsumingEnumerable',那麼它們已經被刪除... –
看起來您正在構建與TPL Dataflow非常相似的東西。如果你可以使用.Net 4.5,我建議你使用它。 – svick