c# – 奇怪的表现行为

栏目: ASP.NET · 发布时间: 6年前

内容简介:翻译自:https://stackoverflow.com/questions/7544438/strange-performance-behavior
我正在使用Visual Studio 2010 SP1,目标框架是2.0,平台目标:任何CPU,在 Windows

7 x64 SP1下进行测试.

我遇到了奇怪的表现行为.

如果没有app.config,或者使用以下app.config,它会使我的程序运行缓慢(秒表显示~0.11秒)

<?xml version="1.0"?>
<configuration>
  <startup >
    <supportedRuntime version="v2.0.50727" />
  </startup>
</configuration>

以下app.config使我的程序运行速度提高了0.5倍(秒表显示~0.02秒)

<?xml version="1.0"?>
<configuration>
  <startup >
    <supportedRuntime version="v4.0.30319" sku=".NETFramework,Version=v4.0" />
  </startup>
</configuration>

这是测试程序代码:

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

class Program
{
    static void Main(string[] args)
    {
        Stopwatch sw = new Stopwatch();

        while (true)
        {
            sw.Reset();
            sw.Start();

            for (int i = 0; i < 1000000; i++ )
            {
                "blablabla".IndexOf("ngrhotbegmhroes", StringComparison.OrdinalIgnoreCase);
            }

            Console.WriteLine(sw.Elapsed);
        }
    }
}

我坐了几个小时,无法弄清楚这里发生了什么.

你有什么想法吗?

听起来你刚刚发现.NET 4的速度要快得多.默认情况下,您的应用程序正在运行其构建目标的框架.当你强制它使用.NET 4时,它会更快.这可能是JIT编译器的改进,它碰巧遇到了你的情况,或者它可能是一个框架改进 – 但是在新版本中某些东西更快的情况应该不会太令人惊讶.

(对于它的价值,如果我是你的话,我会增加迭代次数…在.NET 4下我的盒子上,每次迭代只有10ms,这不是一个很好的测量.我喜欢基准测试至少几秒钟.)

(和米奇一样,我可以确认我看到同样的效果.)

编辑:我刚刚进一步调查了这一点,看到了一个有趣的效果……我假设我们正在调用haystack.IndexOf(needle,StringComparison.OrdinalIgnoreCase):

>在.NET 2上,结果大致相同,无论“针”是多大

>在.NET 4上:

>如果针比干草堆大(根据您的示例),.NET 4比.NET 2快得多

>如果needle与haystack的大小相同,则.NET 4比.NET 2慢一点

>如果针小于haystack,.NET 4比.NET 2慢很多

(这是一个测试,针的第一个字符永远不会出现在大海捞针,顺便说一句.)

翻译自:https://stackoverflow.com/questions/7544438/strange-performance-behavior


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法之美

算法之美

左飞 / 电子工业出版社 / 2016-3 / 79.00元

《算法之美——隐匿在数据结构背后的原理(C++版)》围绕算法与数据结构这个话题,循序渐进、深入浅出地介绍了现代计算机技术中常用的40 余个经典算法,以及回溯法、分治法、贪婪法和动态规划等算法设计思想。在此过程中,《算法之美——隐匿在数据结构背后的原理(C++版)》也系统地讲解了链表(包括单向链表、单向循环链表和双向循环链表)、栈、队列(包括普通队列和优先级队列)、树(包括二叉树、哈夫曼树、堆、红黑......一起来看看 《算法之美》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换