我有一個C#插件用於UML建模產品,該產品可自動繪製圖表並對其進行維護。我正在處理超過6000個圖表的大型企業模型。這需要很長時間(即使在更快的機器上)。所以我創建了一個使用後臺工作線程運行作業的「批處理」部分的版本,而「前景」模式對話允許我儘早停止處理。否則,由於建模程序的UI,我無法將「停止」消息發送到加載項。爲什麼C#後臺工作線程版本花費兩倍於單線程的時間
後臺版本似乎需要單線程版本的兩倍。實際上,我期望後臺工作者線程版本可以是多線程的,但是從我已經能夠做到的事情來看,它並不是真的在單獨的線程中運行。
模式對話框和加載項正確通信,因此兩個功能塊出現位於單獨的線程上。批處理通過DoWork方法在.RunWorkerAsync()下運行。但是如果我在代碼中放置了痕跡,他們會報告沒有在單獨的線程上運行(因爲.Invoke Required設置爲false)。
我本來會期望有少量的開銷,但不會太多(100%)。
發生了什麼事?我應該轉向真正的多線程(而不是BackgroundWorker)嗎?
TIA, 保羅
BackgroundWorker在這裏應該沒問題,我們需要看一些代碼在這裏找到你的問題 –