为什么“最具个人作业的功能”的总和不能超过100%?

时间:2011-07-22 08:28:08

标签: visual-studio profiling

我正在使用VS2010内置配置文件 我的应用程序包含三个线程 其中一个线程非常简单:

while (true)
    if (something) {
        // blah blah, very fast and rarely occuring thing
    }
    Thread.sleep(1000);
}

Visual Studio报告Thread.sleep需要36%的程序时间。 问题是“为什么不〜百分之百的时间?”为什么Main方法占用了40%的时间,我绝对是从开始到结束时在应用程序执行中使用此方法。

enter image description here

分析器是否将结果分配给线程数?

在我的另一个帖子中,我发现该方法占用了34%的时间。 这是什么意思?这是否意味着它只有34%的时间可以工作,或者几乎所有时间都能工作?

在我看来,如果我有三个并行运行的线程,如果我总结方法时间我应该得到300%(例如,如果应用程序运行10秒,这意味着每个线程运行10秒,如果有是3个线程 - 总共30秒)

1 个答案:

答案 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);
        }
    }
}