我正在尝试更新我的扩展VSFileNav以使其与 VS2012 一起使用并对其进行一些改进。它应该列出 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();
}
所以我的问题是,到底为什么一个线程需要将近 1000 倍的时间,我怎样才能产生一个不会缓慢运行的非阻塞函数?- 请记住,当我开始枚举文件中的符号时,它会比 7ms 长得多,否则我不会太在意......