Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# net中一种解密方法的优化_C#_.net - Fatal编程技术网

C# net中一种解密方法的优化

C# net中一种解密方法的优化,c#,.net,C#,.net,我需要使用下面的方法快速解密大量数据。目前,使用提供的ICryptoTransform运行大约需要0.3毫秒。有人能想办法进一步优化它吗?使用不同的dataToDecrypt值但使用相同的解密器连续多次调用该方法 public byte[] DecryptUsingDecryptor(byte[] dataToDecrypt, ICryptoTransform decryptor) { byte[] decryptedData = null; Memory

我需要使用下面的方法快速解密大量数据。目前,使用提供的ICryptoTransform运行大约需要0.3毫秒。有人能想办法进一步优化它吗?使用不同的dataToDecrypt值但使用相同的解密器连续多次调用该方法

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),否则您将始终检索由以前的运行加密的数据。