建议提高一段c#代码的性能

时间:2014-02-05 14:56:00

标签: .net c#-4.0

我们正在开发一种高度实时的应用程序。该应用程序未达标。我们做了一些性能分析,发现下面的代码占用了大部分时间

for (int i = 0; i < _chunkSize; i++)
{
   outputData[i] = (byte)(inputText[i] ^ nonce[i % NonceSize]);
}

_chunkSize1024000NonceSize16。变量inputTextoutputDatanoncebyte数组。

请建议更改此代码段以提高效果

修改

提供更多背景信息 -

我开发了自己的DRM系统,我使用CTR加密算法的自定义.NET实现。在播放电影时,从加密的媒体文件中读取1 MB的电影块,在存储器中解密并馈送到播放器。解密运行缓慢,因此播放器无法播放更大尺寸(> 300MB)的电影。上面一段代码中的nonce是在运行时为每个加密的1 MB块计算的,并与块进行XOR处理以对其进行解密。

1 个答案:

答案 0 :(得分:3)

您可以避免使用余数运算符将索引保持在[0, NonceSize[范围内,而是手动执行此操作。

int index = 0;
for (int i = index; i < _chunkSize; i++, index++)
{
    if(index == NonceSize)
        index = 0;
    outputData[i] = (byte)(inputText[i] ^ nonce[index]);
}

这可能会有所帮助。


我将_chunkSize增加到102400000,以使结果更具相关性。

使用余数运算符

1431 1411 1445 1368 1312 1427 1436 1265 1102 1077
Average: 1327.4

没有

1133 1197 1122 973 976 1032 1460 1229 1211 1145
Average: 1147.8

没有余数运算符,循环速度提高了13.6%。