我正在使用VS2010内置配置文件 我的应用程序包含三个线程 其中一个线程非常简单:
while (true)
if (something) {
// blah blah, very fast and rarely occuring thing
}
Thread.sleep(1000);
}
Visual Studio报告Thread.sleep需要36%的程序时间。
问题是“为什么不〜百分之百的时间?”为什么Main
方法占用了40%的时间,我绝对是从开始到结束时在应用程序执行中使用此方法。
分析器是否将结果分配给线程数?
在我的另一个帖子中,我发现该方法占用了34%的时间。 这是什么意思?这是否意味着它只有34%的时间可以工作,或者几乎所有时间都能工作?
在我看来,如果我有三个并行运行的线程,如果我总结方法时间我应该得到300%(例如,如果应用程序运行10秒,这意味着每个线程运行10秒,如果有是3个线程 - 总共30秒)
答案 0 :(得分:1)
问题是你在测量什么以及 你是如何做到的。根据你的问题,我实际上无法重复你的经历......
Thread.Sleep()
来电本身需要很短的时间。它的任务是从WinAPI调用本机函数,该函数将命令调度程序(负责在线程之间划分处理器时间),调用它的用户线程不应该被安排在下一秒。之后,此线程在此秒结束之前不会收到处理器时间。
但是线程在该状态下不会占用任何处理器时间。我不确定分析器是如何报告这种情况的。
以下是我正在尝试的代码:
internal class Program
{
private static int x = 0;
private static void A()
{
// Just to have something in the profiler here
Console.WriteLine("A");
}
private static void Main(string[] args)
{
var t = new Thread(() => { while (x == 0) Thread.MemoryBarrier(); });
t.Start();
while (true)
{
if (DateTime.Now.Millisecond%3 == 0)
A();
Thread.Sleep(1000);
}
}
}