我google搜索關於這個一些建議,我發現了一些鏈接。最明顯的是this one,但最後我想知道的是我的代碼實現得如何。閱讀從多個線程相同的文件在C#中
我基本上有兩類。一個是轉換,另一個是ConverterThread
我創建一個具有屬性ThreadNumber,告訴我有多少線程應該在同一時間運行該轉換器類的一個實例(這是從用戶讀取)因爲這個應用程序將用於多CPU系統(物理上,如8 cpu),所以它是suppossed,這將加速導入
該轉換器實例讀取一個文件,範圍可以從100MB到800MB,每行此文件是一個製表符分隔的值記錄,它被導入到另一個目標,如數據庫。
ConverterThread類只是在線程內運行(新線程(ConverterThread.StartThread))並且有事件通知,所以當它的工作完成後它可以通知Converter類,然後我可以總結所有這些線程的進度,通知用戶(例如在GUI中)已經導入了多少個這樣的記錄以及已經讀取了多少個字節。
然而,我有一些麻煩,因爲我得到有關該文件不能被讀取的隨機錯誤,或進度(百分比)的總和超過100%,這是不可能的,我認爲發生這種情況是因爲線程管理不善,並且可能由事件返回的信息格式錯誤(因爲它從一個線程「傳播」到另一個線程)
您有任何關於線程實現的更好實踐的建議,所以我可以完成這個?
在此先感謝。
肯定與其他海報的情緒同意時,他們說,使用多線程的複雜性/難度可能會超過任何速度優勢...... –
添加線程可以很好地提高讀取性能。我以此爲基準。請參閱http://stackoverflow.com/questions/1033065/will-using-multiple-threads-with-a-randomaccessfile-help-performance/1254378#1254378。 –
好了,所以我最後用一個單獨的線程來讀取大文件和創造儘可能多的文件,主題配置,所以如果用戶設置4個線程我把4個不同的文件,這個大文件的用戶結束。一旦線程完成,我創建4個線程,每個線程讀取不同的文件並處理每條記錄。我沒有基準測試,但我會讓你知道。感謝所有的答覆。 –