¿Puede alguien identificar por favor si hay posibles pérdidas de memoria en el siguiente código. Lo he intentado con .Net Memory Profiler y dice "CreateEncryptor" y algunas otras funciones están dejando pérdidas de memoria no administradas ya que lo he confirmado usando los monitores de rendimiento.Enfrentando fugas de memoria en el método de cifrado AES
pero ya existen, claro, las llamadas de cerca se realizan siempre que sea posible por favor avísenme en consecuencia. es urgente.
public static string Encrypt(string plainText, string key)
{
//Set up the encryption objects
byte[] encryptedBytes = null;
using (AesCryptoServiceProvider acsp = GetProvider(Encoding.UTF8.GetBytes(key)))
{
byte[] sourceBytes = Encoding.UTF8.GetBytes(plainText);
using (ICryptoTransform ictE = acsp.CreateEncryptor())
{
//Set up stream to contain the encryption
using (MemoryStream msS = new MemoryStream())
{
//Perform the encrpytion, storing output into the stream
using (CryptoStream csS = new CryptoStream(msS, ictE, CryptoStreamMode.Write))
{
csS.Write(sourceBytes, 0, sourceBytes.Length);
csS.FlushFinalBlock();
//sourceBytes are now encrypted as an array of secure bytes
encryptedBytes = msS.ToArray(); //.ToArray() is important, don't mess with the buffer
csS.Close();
}
msS.Close();
}
}
acsp.Clear();
}
//return the encrypted bytes as a BASE64 encoded string
return Convert.ToBase64String(encryptedBytes);
}
private static AesCryptoServiceProvider GetProvider(byte[] key)
{
AesCryptoServiceProvider result = new AesCryptoServiceProvider();
result.BlockSize = 128;
result.KeySize = 256;
result.Mode = CipherMode.CBC;
result.Padding = PaddingMode.PKCS7;
result.GenerateIV();
result.IV = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
byte[] RealKey = GetKey(key, result);
result.Key = RealKey;
// result.IV = RealKey;
return result;
}
private static byte[] GetKey(byte[] suggestedKey, SymmetricAlgorithm p)
{
byte[] kRaw = suggestedKey;
List<byte> kList = new List<byte>();
for (int i = 0; i < p.LegalKeySizes[0].MaxSize; i += 8)
{
kList.Add(kRaw[(i/8) % kRaw.Length]);
}
byte[] k = kList.ToArray();
return k;
}
Lo soporto en cada llamada no hay un escenario específico solo llame a la función cifrar me enfrenté a pérdidas de 30-40MB en 100K llamadas –
Si su generador de perfiles dice que la pérdida de memoria ocurre en CreateEncryptor, ¿por qué cree que ocurre en el código que ¿al corriente? – dtb
Porque puede ser que necesite limpiar algo más también. –