Es scheint so zu sein, dass .Net nach der Ausführung der ersten Zeile tatsächlich keinen Speicher für a
reserviert. Nur während es ausgeführt wird, verbraucht der FillValue
-Aufruf nach und nach den Speicher. (was etwa 400 MB ist)
Kann mir jemand genauere Informationen dazu geben? Ich dachte, dass a
nach der Standardinitialisierung mit 0 gefüllt ist, wie könnte es überhaupt keinen Speicher brauchen?
Es gibt zwei Möglichkeiten, Speicher in Windows zu reservieren: "reservieren" und "festschreiben".
Der Task-Manager zeigt nur "Physical Memory Usage History"; Die .NET-VM verwendet anscheinend nur reservierten Speicher, wenn Sie ein Array zuweisen, und geht dann zurück und schreibt die benötigten Teile fest.
Auf diese Weise können Sie Speicher reservieren, ohne ihn tatsächlich aufzunehmen. Dies ist effizienter und reserviert den Speicher gemäß MSDN "reserviert einen Bereich des virtuellen Adressraums des Prozesses, ohne physischen Speicher im Speicher oder im Paging zuzuweisen Datei auf der Festplatte ". Deshalb zeigt Task-Manager es nicht an.
Sie können mehr darüber auf der % co_de lesen % Seite auf MSDN.
Dies ist jedoch ein Implementierungsdetail, also sollten Sie sich nicht darauf oder irgendetwas verlassen. Die Mono-VM zum Beispiel verhält sich wahrscheinlich anders.
Tatsächlich weist es Speicher zu, wie Sie hier sehen können:
%Vor% (wird benötigt, um die Größe des Arrays zu verringern, um eine OutOfMemoryException
auf ideone zu verhindern)
GC.GetTotalMemory
Methode
Ruft die Anzahl der Bytes ab, von denen derzeit angenommen wird, dass sie zugewiesen sind.
Tags und Links memory c# multidimensional-array