相关疑难解决方法(0)

如何将一个流的内容复制到另一个流?

将一个流的内容复制到另一个流的最佳方法是什么?有没有标准的实用方法?

c# stream copying

511
推荐指数
3
解决办法
28万
查看次数

在循环外移动变量声明是否真的会提高性能?

我正在编写非常耗费处理器的密码学代码(C#),所以我正在寻找任何性能提升,无论多小.我已经在这个问题上听到了双方的意见.

是否有任何性能优势

int smallPrime, spGen;

for (int i = 0; i < numSmallPrimes; i++)
{
    smallPrime = smallPrimes[i];
    spGen = spHexGen[i];

    [...]
}
Run Code Online (Sandbox Code Playgroud)

在这?

for (int i = 0; i < numSmallPrimes; i++)
{
    int smallPrime = smallPrimes[i];
    int spGen = spHexGen[i];

    [...]
}
Run Code Online (Sandbox Code Playgroud)

编译器是否已经这样做了?

c# performance variable-declaration

6
推荐指数
1
解决办法
1085
查看次数

重用for循环迭代变量

我已经看到很多关于是否在for循环范围内部或外部声明变量的问题.这是详细讨论的,例如,这里,这里这里.答案是绝对没有性能差异(相同的IL),但为了清楚起见,在最严格的范围内声明变量是首选.

我对一个稍微不同的情况感到好奇:

int i;

for (i = 0; i < 10; i++) {
    Console.WriteLine(i);
}

for (i = 0; i < 10; i++) {
    Console.WriteLine(i);
}
Run Code Online (Sandbox Code Playgroud)

for (int i = 0; i < 10; i++) {
    Console.WriteLine(i);
}

for (int i = 0; i < 10; i++) {
    Console.WriteLine(i);
}
Run Code Online (Sandbox Code Playgroud)

我希望这两种方法在Release模式下编译为相同的IL.然而,这种情况并非如此.我会给你全部的IL,并指出差异.第一种方法有一个本地:

.locals init (
    [0] int32 i
)
Run Code Online (Sandbox Code Playgroud)

而第二个只有两个本地,每个for循环计数器一个:

.locals init (
    [0] int32 i,
    [1] int32 i
) …
Run Code Online (Sandbox Code Playgroud)

.net c# performance cil

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

标签 统计

c# ×3

performance ×2

.net ×1

cil ×1

copying ×1

stream ×1

variable-declaration ×1