如何使循环更快

时间:2015-12-13 03:14:46

标签: c# performance for-loop encryption

我遇到的问题是这个for循环需要很长时间才能完成。 我想要一种更快的方法来完成它。

ArrayList arrayList = new ArrayList();
byte[] encryptedBytes = null;
for (int i = 0; i < iterations; i++)
{
    encryptedBytes = Convert.FromBase64String(inputString.Substring(base64BlockSize * i,
                     base64BlockSize));
    arrayList.AddRange(rsaCryptoServiceProvider.Decrypt(encryptedBytes, true));
}

iterations变量有时会大于100,000,而且永远都是这样。

1 个答案:

答案 0 :(得分:2)

您是否考虑在并行循环中运行解密过程?您的输入字符串必须首先在常规循环中准备,但这是一个快速的过程。然后在Parallel.For中运行解密:

var inputs = new List<string>();
var result = new string[(inputString.Length / 64) - 1];

// Create inputs from the input string.
for (int i = 0; i < iterations; ++i)
{
    inputs.Add(inputString.Substring(base64BlockSize * i, base64BlockSize));
}

Parallel.For(0, iterations, i =>
{
    var encryptedBytes = Convert.FromBase64String(inputs[i]);
    result[i] = rsaCryptoServiceProvider.Decrypt(encryptedBytes, true);
});

我假设返回的结果是一个字符串,但如果不是这样,那么你必须调整并发包集合的类型。