内容简介:翻译自:https://stackoverflow.com/questions/7544438/strange-performance-behavior
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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Twenty Lectures on Algorithmic Game Theory
Tim Roughgarden / Cambridge University Press / 2016-8-31 / USD 34.99
Computer science and economics have engaged in a lively interaction over the past fifteen years, resulting in the new field of algorithmic game theory. Many problems that are central to modern compute......一起来看看 《Twenty Lectures on Algorithmic Game Theory》 这本书的介绍吧!