相关疑难解决方法(0)

Interlocked.Increment的性能

Interlocked.Increment(ref x)不是更快或更慢x++的在各种平台上整数和长?

.net performance interlocked interlocked-increment

22
推荐指数
4
解决办法
1万
查看次数

C#生成IL for ++运算符 - 何时以及为什么前缀/后缀表示法更快

由于这个问题是关于增量运算符和带前缀/后缀表示法的速度差异,我将非常仔细地描述这个问题,以免Eric Lippert发现它并激怒我!

(有关我为什么要问的更多信息和详细信息,请访问http://www.codeproject.com/KB/cs/FastLessCSharpIteration.aspx?msg=3899456#xx3899456xx/)

我有四个代码片段如下: -

(1)单独,前缀:

    for (var j = 0; j != jmax;) { total += intArray[j]; ++j; }
Run Code Online (Sandbox Code Playgroud)

(2)单独,后缀:

    for (var j = 0; j != jmax;) { total += intArray[j]; j++; }
Run Code Online (Sandbox Code Playgroud)

(3)Indexer,Postfix:

    for (var j = 0; j != jmax;) { total += intArray[j++]; }
Run Code Online (Sandbox Code Playgroud)

(4)索引器,前缀:

    for (var j = -1; j != last;) { total += intArray[++j]; } // last = jmax - 1
Run Code Online (Sandbox Code Playgroud)

我试图做的是证明/反驳在这个上下文中前缀和后缀表示法之间是否存在性能差异(即局部变量因此不易变,不能从另一个线程等变化)如果存在,为什么会出现这种情况.

速度测试表明:

  • (1)和(2)以相同的速度运行.

  • (3)和(4)以相同的速度运行.

  • (3)/(4)比(1)/(2)慢〜27%.

因此,我得出的结论是,在postfix表示法本身上选择前缀表示法没有性能优势.但是,当实际使用操作结果 …

c# optimization performance il postfix-notation

20
推荐指数
3
解决办法
2078
查看次数