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

Minnesproblem i .Net (c#)


i3o6

Rekommendera Poster

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?

Länk till kommentar
Dela på andra webbplatser

  • 2 veckor senare...
  • 1 month later...

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

 

using (var gen = new MD5CryptoServiceProvider())
{
   hash = gen.ComputeHash(Permutation.Next());
Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.



×
×
  • Skapa nytt...