我正在嘗試更新我的擴展VSFileNav以使其與VS2012協同工作並對其進行一些改進。它應該列出Visual Studio解決方案中的所有文件,但我想將其擴展到列出方法/符號。爲什麼Visual Studio後臺線程如此緩慢?
我以前試過這個,從來沒有到過我的問題的底部。我發現,如果我在主線程上枚舉Solution->Projects->Project Items
,它的速度相當快,但是如果我嘗試使用任何類型的線程,就會慢下來。我知道符號搜索需要從以前的嘗試,我已經沒有重新實現了一會兒的,但作爲一個例子,試圖找到所有的ProjectItem
文件名時:
ProcessMainThread了:7毫秒
的
ProcessBackgroundThreadPool了:6661毫秒
ProcessCustomThread了:6750毫秒
片段我的代碼來運行這個,因爲我已經提到的所有它做的是枚舉所有的ProjectItems
最終:
public void TimeProcess()
{
Stopwatch sw = Stopwatch.StartNew();
ProcessMainThread();
sw.Stop();
Debug.WriteLine("ProcessMainThread took : " + sw.ElapsedMilliseconds + " ms");
ProcessBackgroundThreadPool();
ProcessCustomThread();
}
public void ProcessMainThread()
{
Process();
}
public void ProcessBackgroundThreadPool()
{
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback((o) =>
{
Stopwatch sw = Stopwatch.StartNew();
Process();
sw.Stop();
Debug.WriteLine("ProcessBackgroundThreadPool took : " + sw.ElapsedMilliseconds + " ms");
}));
}
public void ProcessCustomThread()
{
System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(() =>
{
Stopwatch sw = Stopwatch.StartNew();
Process();
sw.Stop();
Debug.WriteLine("ProcessCustomThread took : " + sw.ElapsedMilliseconds + " ms");
}));
t.Start();
}
所以我的問題是,爲什麼在地球上幾乎1000X只要採取一個線程,我怎麼能產生不打算運行緩慢無阻塞的功能? - 牢記,當我開始在它的將文件中列舉符號比7毫秒更長的時間,否則我也不會太在意......
感謝您的解釋漢斯,可能是我需要閱讀的東西。那麼有沒有合理的方法可以解決這個問題? - 如果使用線程比較慢,我可以考慮的唯一選擇是a)保持緩慢並在後臺執行一些工作,b)嘗試並找到路由到主線程的方法(不確定是否可以完成使用BeginInvoke等)或c)手動在後臺線程上以非COM方式工作。 – Ian