Nach dem Aufruf setTimeout
, gibt es Speicherverlust Problem ohne Aufruf clearTimeout
?Gibt es Speicherverlust Problem, wenn ClearTimout nach dem Aufrufen von SetTimeout nicht aufrufen
Danke.
Nach dem Aufruf setTimeout
, gibt es Speicherverlust Problem ohne Aufruf clearTimeout
?Gibt es Speicherverlust Problem, wenn ClearTimout nach dem Aufrufen von SetTimeout nicht aufrufen
Danke.
Nein. ClearTimeout muss nur aufgerufen werden, wenn Sie ein ausstehendes setTimeout stoppen möchten. Nach dem setTimeout ist die Timer-ID nicht mehr gültig, aber glücklicherweise ist das Aufrufen von clearTimeout mit einer ungültigen Timer-ID harmlos.
Wenn Speicherlecks auftreten, liegt das Problem woanders.
Es gibt Zeiten, in denen SetTimeout können Speicherverluste verursachen ... siehe den folgenden Artikel: setTimeout memory leaks
Seien Sie gewarnt, dass IEx eine Garbage-Collector-Feinheit hat, obwohl; Ich denke, wenn Sie eine DOM-Variable in einem JavaScript-Closure referenzieren, dann wird der Sammelmechanismus verwirrt und am Ende der Anfrage wird er nicht verworfen: Schließlich wird dies zu einem Speicherleck. Ich denke, das liegt daran, dass DOM-Variablen und interne JS-Variablen von zwei verschiedenen Kollektoren gesammelt werden und nicht richtig darüber kommunizieren, was nicht mehr verwendet wird.
Ich glaube, Sie können dieses Problem beheben, indem Sie die Variable auf null setzen:
setTimeout(function(){
myFunction(parameter);
parameter = null
}, myTimeout);
Diese explizit setzt die Garbage Collection in Bewegung.
Warum fragen Sie? Kannst du es ausarbeiten? Haben Sie bei der Verwendung von setTimeout Speicherlecks festgestellt? Auf welche Browser zielen Sie? –