Just nu i M3-nätverket
Gå till innehåll
i3o6

LÖST Minnesproblem i .Net (c#)

Rekommendera Poster

Postad (redigerade)

Jag experimenterar lite med trådning och det går ju bra tänkte jag, ända tills jag testade mitt program på en annan dator.

Istället för att konsumera 16MB RAM så rusar det iväg till 3GB och kraschar.

Vad kan det var för knas? Någon "minor" versionsskillnad på .Net? inställningar i Visual Studio? eller skillnader i win7/win8.1?

 

Sen så kan det ju vara bra att veta hur man kan undvika problemet genom att inte skriva dålig kod.

 

Borde inte garbage collectorn hantera de här arrayerna eller måste man döda dom på nåt bra sätt?:

byte [] hash1 = new byte[16];
byte [] hash2 = Hex2ByteArray("541c57960bb997942655d14e3b9607f9");
while(true){
  hash1 = MD5(Permutation.Next());
  if(hash1.SequenceEqual(hash2)) return Permutation.Value;
}

Man kanske ska göra såhär istället?:

MD5(Permutation.Next()).CopyTo(hash1, 0);

Men känns som om man förlorar massa prestanda om man ska kopiera.

Har inte tillgång till den felande datorn nu så det är lite jobbigt att felsöka :P

 

 

Edit:

Om jag sätter ett fast värde på hash1 så händer inget farligt. Min permutationssak är ok och trådningen är ok antar jag då? Och felet borde vara här!?!?

 

Får samma problem med CopyTo. Måste man implementera nån dispose-sak?

Redigerad av i3o6

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Tydligen problem med System.Security.Cryptography.MD5
Men det här funkar:

 

using (var gen = new MD5CryptoServiceProvider())
{
   hash = gen.ComputeHash(Permutation.Next());

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...