c# - 当我对一个程序进行采样分析时,它实际上运行得比不进行分析更快,这是怎么回事?

标签 c# performance profiling dottrace

我使用 DotTrace 4.5 性能

Release模式时间:

 2400000000
 Basic: 00:00:08.8051103
 2400000000
 Five: 00:00:09.1561338
 2400000000
 Overload: 00:00:16.3740938
 2400000000
 IListtoFive: 00:00:15.5841445

在 Release模式下进行分析的时间。

 2400000000
 Basic: 00:00:01.0048224
 2400000000
 Five: 00:00:03.5416982
 2400000000
 Overload: 00:00:11.8009959
 2400000000
 IListtoFive: 00:00:11.2568770

我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace testLineIndex
{

    class Program
    {
        static long Five(int s0, int s1, int s2, int s3, int s4)
        {
            return s4 + 100 * s3 + 10000 * s2 + 1000000 * s1 + 100000000 * s0;
        }

        static long Overload(IList<int> line)
        {
            return Five(line[0], line[1], line[2], line[3], line[4]);
        }

        static long IListtoFive(IList<int> line)
        {
            return line[0]+100* line[1]+10000* line[2]+1000000* line[3]+100000000*line[4];
        }

        static void Main(string[] args)
        {
            Stopwatch watch = new Stopwatch();

            long testSize = 400000000;
            //List<int> myList = new List<int> { 1, 2, 3, 4, 5 };
            int[] myList = new int[] { 1, 2, 3, 4, 5 };
            long checksum = 0;
            watch.Start();
            for (long i = 0; i < testSize; i++)
            {
                long ret = Five(1,2,3,4,5);
                checksum += ret % 9;
            }
            watch.Stop();
            Console.WriteLine(checksum);
            Console.WriteLine("Basic: {0}", watch.Elapsed);

            checksum = 0;
            watch.Restart();
            for (long i = 0; i < testSize; i++)
            {
                long ret = Five(myList[0], myList[1], myList[2], myList[3], myList[4]);
                checksum += ret % 9;
            }
            watch.Stop();
            Console.WriteLine(checksum);
            Console.WriteLine("Five: {0}",watch.Elapsed);

            checksum = 0;
            watch.Restart();
            for (long i = 0; i < testSize; i++)
            {
                long ret = Overload(myList);
                checksum += ret % 9;
            }
            watch.Stop();
            Console.WriteLine(checksum);
            Console.WriteLine("Overload: {0}", watch.Elapsed);

            checksum = 0;
            watch.Restart();
            for (long i = 0; i < testSize; i++)
            {
                long ret = IListtoFive(myList);
                checksum += ret % 9;
            }
            watch.Stop();
            Console.WriteLine(checksum);
            Console.WriteLine("IListtoFive: {0}", watch.Elapsed);
            Console.ReadKey();
        }
    }
}

最佳答案

我怀疑是调试器。即使您在 Release模式下运行它,从 VS 运行它也会附加调试器,这会大大降低它的速度。

关于c# - 当我对一个程序进行采样分析时,它实际上运行得比不进行分析更快,这是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7517024/

相关文章:

c# - 发送带重音的参数c#

c# - 如何将完整的 Sqlite 连接字符串传递给 DbContext

javascript - Jquery 压缩在性能方面

linux - 为什么 PMP(穷人的分析器)不能在 nginx 上工作?

c# - SharePoint:如何以编程方式将附件添加到列表项?

C# LINQ 查询一个List<Dicitonary<string, object>>

mysql - 正则表达式 vs 加入性能 Mysql

performance - 平均响应时间与平均周转时间

c++ - 剖析 C++ 代码编译速度

java - 如何在 Java WebStart (JNLP) 应用程序中获取多个 hprof 转储?