8

次の例で <canvas> によって割り当てられたメモリを解放するにはどうすればよいですか:

<html>
  <head>
  </head>
  <body id="body">
    <canvas id="canvas" width=3000 height=2000/>
    <script>
      var canvas = document.getElementById("canvas");
      var ctx = canvas.getContext("2d");
      ctx.fillText("hao ar iu?", 20, 20);
    </script>
  </body>
</html>

var canvasを null (canvas = null) に設定するか、キャンバスを削除する (キャンバスを削除する) か、キャンバスを動的に作成して「ドキュメント」ルートに追加しようとしましたが、その方法で削除した後:

<div onclick=reload()>CLICK TO RELOAD PAGE</div>
<script>
  function reload(){
    body.removeChild(canvas);
    location.reload();
  }
</script>

ブラウザが CPU RAM メモリを占有しすぎるまで、ページがリロードされるたびに割り当てられたメモリがどんどん大きくなります。ブラウザがクラッシュすることがあります。ガベージ コレクターは、スコープ外の変数の一部をクリーンアップすることがあります。しかし、それはあまりにも多くのメモリを占有します。Chrome バージョン 25 を使用しています。 <canvas> メモリを解放したり、ガベージ コレクションを早期に開始したりする手段はありますか?

4

1 に答える 1

-1

JavaScript 演算子 delete を試しましたか?

delete canvas;

それ以外の場合は、私のために働くこれを試すことができます:

canvas.parentNode.removeChild(canvas);

キャンバスへのすべての参照を、DOM やその他のオブジェクトによるものであっても、メモリ リークを回避するために必ず削除する必要があります。

PS: キャンバスのサイズが非常に大きいことを忘れていました。キャンバスのサイズをできるだけ小さくして、メモリの使用量を減らし、fps を上げます。

PS2: パスを閉じると、メモリ リークを回避できます

于 2013-05-02T05:32:47.803 に答える