Ich arbeite mit Canvas und seinem ImageData-Objekt, das eine große Datenmenge enthält (Millionen von Ganzzahlen). Das Arbeiten mit einigen Arrays erfordert also bereits viel Speicher (bis zu 300 MB). Gibt es eine Möglichkeit, den Speicher eines Arrays freizugeben, wenn dies nicht erforderlich ist? Ich versuche, undefined
dieser Variablen zuzuweisen . Ist es richtig?
70
null
anstelle vonundefined
Antworten:
Wenn die Variable weiterhin besteht (z. B. global oder Teil einer dauerhaften Datenstruktur) und die Daten, auf die sie verweist, groß sind und Sie möchten, dass diese Daten für die Speicherbereinigung in Frage kommen, weisen Sie dieser Variablen zu Recht etwas Kleines zu.
undefined
odernull
oder""
wird alles funktionieren. Sie löschen den Verweis auf die großen Datenmengen, damit diese für die Speicherbereinigung in Frage kommen. Wenn nichts anderes in Ihrem Javascript auf diese Daten verweist, kann es vom Garbage Collector freigegeben werden. Wenn irgendetwas anderes einen Verweis darauf hat, kann es nicht freigegeben werden.Wenn Sie beispielsweise ein Array mit 10.000 Elementen in einer globalen Variablen gespeichert haben:
var largeDataArray = new Array(10000);
Und wenn Sie die meisten Elemente mit Daten gefüllt haben, können Sie zulassen, dass dieser Speicher für die Speicherbereinigung geeignet ist, indem Sie ihm einen anderen Wert zuweisen, z.
largeDataArray = null;
oder wenn Sie immer noch möchten, dass es sich um ein Array handelt:
Hinweis: Variablen, die selbst den Gültigkeitsbereich verlassen (wie lokale Variablen in Funktionen, die nicht Teil eines dauerhaften Abschlusses sind) oder Variablen in Objekten, die selbst den Gültigkeitsbereich verlassen, müssen nicht manuell gelöscht werden. Wenn sie den Gültigkeitsbereich verlassen oder wenn das übergeordnete Objekt gelöscht wird, können die darin enthaltenen Daten auch zur Speicherbereinigung verwendet werden.
Das Löschen einer Variablen muss also nur erfolgen, wenn Sie explizit Daten freigeben möchten, die in einer langlebigen Variablen gespeichert sind, und es ist normalerweise nur relevant, sich darüber Gedanken zu machen, wenn die Daten groß sind oder wenn Sie viele davon hinzufügen bis zu mehreren Megabyte Daten (die Speichernutzung ist auf Smartphones auf niedrigeren Ebenen von größerer Bedeutung als in Desktop-Browsern).
quelle
delete
Javascript, aber es dient hauptsächlich zum Löschen von Eigenschaften aus Objekten, nicht wie das Löschen in C ++. Sie können alle über Lösch lesen hier .largeDataArray
das vorherige Array für die Speicherbereinigung in Frage kommt (sofern keine anderen Verweise darauf vorhanden sind). Ja, Sie können.length
je nach Ihren Umständen auch Null setzen .JavaScript verfügt über eine automatische Speicherverwaltung. Speicher, der Objekte enthält, auf die nicht mehr verwiesen wird, kann nur dann gespeichert werden, wenn ein Speicherverlust vorliegt. Es ist im Allgemeinen nicht erforderlich
undefined
, Variablen manuell zuzuweisen .Wenn Ihr Programm zu viel Speicher verwendet, sollten Sie die Arrays verkleinern , um nicht mehr benötigte Elemente zu entfernen. Siehe
Array.pop
,Array.shift
undArray.splice
.quelle