我遇到的问题是这个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,而且永远都是这样。
答案 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);
});
我假设返回的结果是一个字符串,但如果不是这样,那么你必须调整并发包集合的类型。