2013-04-11 38 views
0

我需要使用下面的方法快速解密大量數據。目前,使用提供的ICryptoTransform運行大約需要0.3 ms。有人可以想辦法進一步優化它嗎?該方法連續調用多次,具有不同的dataToDecrypt-value但具有相同的解密器。在.net中優化解密方法

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; 
    } 
+0

@GungFoo - 我不知道C#是一種腳本語言..... – Tim 2013-04-11 08:19:40

+2

不,它不是。真。表現自己。 – Areks 2013-04-11 08:20:42

+5

@GungFoo這個便宜的拖釣真的不合適。 – Andrey 2013-04-11 08:20:53

回答

0

我真的不知道,如果你發現任何的性能提升,但如果您使用的是相同的decryptor不能你只是將其設定爲私人領域重新使用相同的msDecryptcsDecrypt

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; 
    } 
} 

正如我所說的,我不知道這是否會作出任何差別,但我認爲,至少,你不會是你MemoryStreamCryptoStream每一次重建。

+1

好主意測試。但是,你還需要清除流(或至少MemoryStream),否則你將總是檢索以前運行加密的數據。 – Fabske 2013-04-11 08:35:25