我目前得到一個文件夾完整的1280x720 AES加密位圖。C# - AES解密性能慢
我試圖通過文件夾來創建一個播放器環路解密圖像,並在圖像框顯示他們(以合理的速度)
重要的是我不想要的文件進行解密,以驅動然後播放。我只想在內存中解密它們。
目前解密每個圖像(幀)需要大約100ms。但如果可能的話,我想嘗試將其降低到大約10ms。
以上是異形的iCore7
目前我正在運行UI線程上一切3.0GHz的。我想也許如果我多線程解密,我可能會得到我想要的速度,那麼我將不得不在內存中存儲很多。但我寧願看看我能否更快地實際解密。
這裏是解密函數:
private byte[] DecryptFile(string inputFile, string skey)
{
MemoryStream output1 = new MemoryStream();
// ok for tests..
Rfc2898DeriveBytes k2 = new Rfc2898DeriveBytes(skey, new byte[] { 10, 10, 10, 10, 10, 10, 10, 10 });
try
{
using (RijndaelManaged aes = new RijndaelManaged())
{
byte[] key = k2.GetBytes(16);
/* This is for demostrating purposes only.
* Ideally yu will want the IV key to be different from your key and you should always generate a new one for each encryption in other to achieve maximum security*/
byte[] IV = k2.GetBytes(16);
byte[] cript = File.ReadAllBytes(inputFile);
using (MemoryStream fsCrypt = new MemoryStream(cript))
{
using (ICryptoTransform decryptor = aes.CreateDecryptor(key, IV))
{
using (CryptoStream cs = new CryptoStream(fsCrypt, decryptor, CryptoStreamMode.Read))
{
cs.CopyTo(output1);
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return output1.ToArray() ;
}
難道還有比上面的函數來解密更有效的方法?
看來你創建了很多東西,每通過循環。也許如果你能「把它弄出來」,你不會花太多時間來初始化。你是否簡介了代碼 - 你知道你大部分時間在哪裏?顯然,如果你有一個i7,你需要以多線程的方式寫這個 - 至少保持所有這些處理器忙碌,如果你可以...... – Floris
大約98%的時間被cs.CopyTo(output1)行佔用。 即使我把它縮小到10ms,我也會把它寫成多線程的,但是現在我想盡可能快地得到這個函數:) – james