C# net中一种解密方法的优化
我需要使用下面的方法快速解密大量数据。目前,使用提供的ICryptoTransform运行大约需要0.3毫秒。有人能想办法进一步优化它吗?使用不同的dataToDecrypt值但使用相同的解密器连续多次调用该方法C# net中一种解密方法的优化,c#,.net,C#,.net,我需要使用下面的方法快速解密大量数据。目前,使用提供的ICryptoTransform运行大约需要0.3毫秒。有人能想办法进一步优化它吗?使用不同的dataToDecrypt值但使用相同的解密器连续多次调用该方法 public byte[] DecryptUsingDecryptor(byte[] dataToDecrypt, ICryptoTransform decryptor) { byte[] decryptedData = null; Memory
public byte[] DecryptUsingDecryptor(byte[] dataToDecrypt, ICryptoTransform decryptor)
{
byte[] decryptedData = null;
MemoryStream msDecrypt = new MemoryStream();
CryptoStream csDecrypt = new CryptoStream(msDecrypt,
decryptor,
CryptoStreamMode.Write);
csDecrypt.Write(dataToDecrypt, 0, dataToDecrypt.Length);
csDecrypt.FlushFinalBlock();
decryptedData = msDecrypt.ToArray();
csDecrypt.Close();
return decryptedData;
}
我真的不知道您是否会注意到任何性能改进,但是如果您使用相同的
解密程序
,您是否可以将相同的msDecrypt
和csDecrypt
设置为私有字段,从而重复使用它们
public class Decrypter
{
private MemoryStream msDecrypt;
private CryptoStream csDecrypt;
public Decrypter(ICryptoTransform decryptor)
{
msDecrypt = new MemoryStream();
csDecrypt = new CryptoStream(msDecrypt,decryptor,CryptoStreamMode.Write);
}
public byte[] DecryptUsingDecryptor(byte[] dataToDecrypt)
{
byte[] decryptedData = null;
csDecrypt.Write(dataToDecrypt, 0, dataToDecrypt.Length);
csDecrypt.FlushFinalBlock();
decryptedData = msDecrypt.ToArray();
csDecrypt.Close();
return decryptedData;
}
}
正如我所说,我不知道这是否会有什么不同,但我认为,至少,你不会每次都重新创建
内存流
和加密流。@GungFoo-我不知道C是一种脚本语言……不,不是。真正地规矩点。@GungFoo这种廉价的拖拉真的不合适。我认为你不能真正优化它,除非你改变使用的加密算法。如果您想要更多的“感觉”性能,您可以尝试并行执行,这样您就可以使用多cpu/核心架构。顺便说一句,这是一个细节,但您不需要处理内存流。还考虑使用“使用”块,以便在错误的情况下也可以设置流。测试的好主意。但是,您还需要清除这两个流(或者至少是MemoryStream),否则您将始终检索由以前的运行加密的数据。