2013-04-11 2 views
0

아래의 방법을 사용하여 많은 양의 데이터를 신속하게 해독해야합니다. 현재 제공되는 ICryptoTransform을 실행하려면 약 0.3ms가 걸립니다. 누군가 그것을 더 이상 최적화 할 수있는 방법을 생각할 수 있습니까? 이 메서드는 다른 dataToDecrypt-value와 함께 여러 번 연속적으로 호출되지만 동일한 decryptor로 호출됩니다..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

+2

아니요, 그렇지 않습니다. 정말. 행동하라. – Areks

+5

@ GungFoo이 값싼 조업은 실제로 부적절합니다. – Andrey

답변

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

관련 문제