Ich habe eine andere aktive Frage HERE in Bezug auf einige hoffnungslose Speicherprobleme, die möglicherweise LOH Fragmentierung unter möglicherweise anderen Unbekannten beinhalten.Große Arrays und LOH-Fragmentierung. Was ist die akzeptierte Konvention?
Was meine Frage ist jetzt, was ist der akzeptierte Weg, Dinge zu tun? Wenn meine App in Visual C# durchgeführt werden muss und große Arrays mit der Intune-Zahl [4000000] behandelt werden müssen, wie kann ich dann die Verweigerung des Garbage Collectors mit dem LOH umgehen?
Es scheint, dass ich gezwungen bin, irgendwelche großen Arrays global zu machen, und niemals das Wort "neu" um irgendeinen von ihnen zu verwenden. Also, ich bin links mit ungeahnten globalen Arrays mit "maxindex" Variablen anstelle von ordentlich großen Arrays, die von Funktionen weitergegeben werden.
Mir wurde immer gesagt, dass dies eine schlechte Übung sei. Welche Alternative gibt es?
Gibt es eine Art Funktion für die Melodie von System.GC.CollectLOH("Seriously")
? Gibt es möglicherweise eine Möglichkeit, Garbage Collection auf etwas anderes als System.GC auszulagern?
Wie lauten die allgemein anerkannten Regeln für den Umgang mit großen (> 85Kb) Variablen?
Das ist wahrscheinlich eine schlechte Frage ... aber wie bekomme ich CDB und SOS? Google scheint das nicht zu wissen. Alle Links, denen ich folge, um CDB herunterzuladen, verweisen mich auf eine MSDN-Suchergebnisseite, die "DDK3" auflistet, unter anderem, die nicht wie CDB klingen. –
Download 'Debugging Tools für Windows'. CDB ist der Konsolen-Debugger und WinDbg ist das 'grafische' Äquivalent (es ist immer noch Text-Modus, aber in einem MDI-Fenster gerendert). SOS kommt mit .NET: '% systmeroot% \ microsoft.net \ framework \ v2.0.50727 \ sos.dll' (.NET 3 verwendet die .NET 2 SOS.dll, .NET 4 kommt mit einer eigenen Version.) –
Auch , Sie können scheinbar SOS aus dem Direktfenster in Visual Studio laden (Vermeidung von CDB), aber ich habe es noch nie versucht. –