У меня есть зашифрованный файл, который я расшифрован первым, а затем попытаться десериализациями его с помощью memorystream
и binaryformatter
, но когда я пытаюсь присвоить десериализованные файлы в список Ловля OutOfMemoryException
(файл действительно мало - 17KB) здесь это коднебольшого файл причина OutOfMemoryException
byte[] encryptedData = File.ReadAllBytes(fileName);
byte[] result = Decrypt(Algo, key, vector, encryptedData) ;
BinaryFormatter ser = new BinaryFormatter();
using (MemoryStream ms = new MemoryStream(result)) {
try {
files = ser.Deserialize(ms) as List<IItem>;
} catch (OutOfMemoryException) {
} catch (SerializationException) {
MessageBox.Show("Incorrect password!");
return;
}
}
files = ser.Deserialize(ms) as List<IItem>;
- это то, что причина исключения зашифрован размером файла 1696 после дешифрования 1691 - нормального размера. здесь дешифрование код
public byte[] Decode(byte[] data)
{
string key = ASCIIEncoding.ASCII.GetString(rc2.Key);
string IV = ASCIIEncoding.ASCII.GetString(rc2.IV);
ICryptoTransform decryptor = rc2.CreateDecryptor(rc2.Key,rc2.IV);
StringBuilder roundtrip = new StringBuilder();
using (MemoryStream msDecrypt = new MemoryStream(data))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
int b = 0;
do
{
b = csDecrypt.ReadByte();
if (b != -1)
{
roundtrip.Append((char) b);
}
} while (b != -1);
}
}
byte[] decrypted = ASCIIEncoding.ASCII.GetBytes(roundtrip.ToString());
return decrypted;
}
Каково потребление памяти вашего приложения в момент выброса «OutofMemoryException»? И в какой среде вы находитесь? Мобильное приложение или рабочий стол? x86 или x64? –
около 12-13MB. enviroment MVS, desktop app, x86 – KofHein
Можете ли вы распечатать 'ms.Length' (или проверить его в отладчике)? Сначала десериализуйте объект, а затем посмотрите на фактический тип в отладчике (тип мыши и вид, или в часах, используйте функцию variable.GetType()). –