
現在、Canvasを使ってペイントソフトにあるような「レイヤー」的な
ことが出来ないか実験をしています。
(レイヤー数に関しては、最大で24程度を考えています。)
環境等は、以下の通りです。
OS:Windows XP Pro(SP3) 32bit
メモリ:2GB
ブラウザ:各ブラウザの最新版(FireFox,Chrome,Opera,safariも実施予定です。)
実験の結果、大量のレイヤーを使用した場合に
ついてメモリーリーク的な問題が発生しているような感じがしています。
もちろん、レイヤーなのである程度のメモリ消費は承知の上だったのですが
タブを閉じた際や描画してから時間が経過してもメモリ使用量が減少しないのは
使用上問題がありますので質問させて頂くことになった次第です。
(なお、レイヤー数を削減すると、比例してメモリ使用量も削減されていました。
メモリ使用量に関しては、タスクマネージャのプロセスタブのメモリ使用量
で見ています。)
で、この問題が特に顕著なのが、Firefoxです。
私見では、1レイヤーにつき1MB程度消費してしまう感じです。
他のブラウザ(クローム、オペラ)では一時的にメモリ使用量は
増加しますが、時間が経過するとだいたい元にもどります。
なお、実験は以下のようなサンプルを作成して行っています。
(途中省略しています。)
ご教授して頂きたい点は、以下になります。
■メモリーリークが起きている場合の対処方法
(特にFirefoxにおける対処方法)
■Canvasを使用しない場合の代替案
宜しくお願い致します。
<html>
<head>
<script>
function draw() {
canvas = document.getElementById("g0");
if(!canvas || !canvas.getContext) return false;
ctx = canvas.getContext('2d');
ctx.font = "15px 'MS Pゴシック'";
ctx.fillStyle = "black";
ctx.fillText("aaa", 100, 100);
canvas = document.getElementById("g1");
if(!canvas || !canvas.getContext) return false;
ctx = canvas.getContext('2d');
ctx.font = "15px 'MS Pゴシック'";
ctx.fillStyle = "black";
ctx.fillText("bbb", 150, 150);
canvas = document.getElementById("g23");
if(!canvas || !canvas.getContext) return false;
ctx = canvas.getContext('2d');
ctx.font = "15px 'MS Pゴシック'";
ctx.fillStyle = "black";
ctx.fillText("eee", 300, 300);
}
function start() {
draw();
}
</script>
</head>
<body onload="start()">
<body onload="start()">
<canvas height="500" width="500" class="g" id="g0"></canvas>
<canvas height="500" width="500" class="g" id="g23"></canvas>
</body>
</html>
No.3ベストアンサー
- 回答日時:
「Windows XP Pro SP3 + Firefox4 + タスクマネージャ」で確認しましたが、リークしているようには見えません。
ページ描画時に一時的にメモリ消費量が増加し、やがて消費量が減ります。タブを閉じればメモリは解放されました。
(<body onload="start()"> を削る、DOCTYPE宣言を加える等、やや変更を加えていますが基本的には掲示されたコードと同じです)
http://fiddle.jshell.net/mQpwL/
Firefox の拡張やPluginを全てオフにしても再現しますか?
Firefox のバージョンは 4 でしょうか?
ご連絡が遅くなりまして大変申し訳ありませんでした。
質問させて頂いた後で4がリリースされたのを知りまして
4にしてみました。
で、プラグインをオフにするとかなり改善されることがわかりました。ご助言して頂きましてありがとうございました。
No.2
- 回答日時:
OS:Windows XP Pro(SP3) 32bit
メモリ:2GB
Firefox:3.6.15
で、あえて
<body onload="start()">
<body onload="start()">
のまま試したけど、別にリークしてませんね?
(Windowタスクマネージャのメモリ使用量とメモリデルタで確認した)
他にも別パターン(ローカル変数化とか)いろいろやったけど、
ご提示のような単純パターンだとリークはしてませんね。
ご連絡が遅くなりまして大変申し訳ありませんでした。
確かにそのようです。
もう少し試行錯誤してみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 次に、楽天のアジャイル就活に参加して、1日で内定を獲得できる。私は大企業に就職できる? 2 2022/04/17 13:38
- シューズ・ブーツ コンバースオールスターの「CANVAS ALL STAR J HI」と「CANVAS ALL STA 2 2022/12/30 17:22
- JavaScript 変数のスコープの問題? 3 2022/06/23 09:32
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- その他(プログラミング・Web制作) Pythonによる物理の斜方投射の位置座標表示について 2 2023/06/05 12:46
- その他(プログラミング・Web制作) Pythonにおける物理のシミュレーションでの単位変換について 2 2023/06/02 17:11
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
- アイドル・グラビアアイドル NGT48について 1 2022/07/21 09:21
- その他(プログラミング・Web制作) Pythonでのかんたんな物理シミュレーションについての書籍 5 2023/06/02 07:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
危険なURL?
-
VS2013の選択した行に出る白枠...
-
googleサーチコンソールでの重...
-
TextBoxのカーソルを右端に移す...
-
フラッシュとドロップダウンメ...
-
ファーストピアスのキャッチが...
-
WEB作成で参考・お手本になるH...
-
Powerbullet
-
WPのウィジェット(ブロックエ...
-
フラッシュのswfをHTML内のifra...
-
▲▲フラッシュのリンクの張り方...
-
P902i 自作着うた(iモーション...
-
お教えください
-
VBにて、非アクティブでフォー...
-
vb.netでフォーカスされている...
-
ASP.NET 動的コントロールのフ...
-
バイナリファイルの編集
-
word
-
数式中の文字をCambria Math以...
-
PowerPoint SmartArtの箇条書...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファーストピアスのキャッチが...
-
ASP.NET 動的コントロールのフ...
-
TextBoxのカーソルを右端に移す...
-
googleサーチコンソールでの重...
-
Access2010 SetFocusが当たらない
-
VS2013の選択した行に出る白枠...
-
EXCEL VBAで URLの内容 が取...
-
人体切断マジックの事でお聞き...
-
Canvasのメモリーリーク疑いに...
-
LINEのステメやプロ画は変える...
-
vb.netでフォーカスされている...
-
ユーザーがクリックするまでフ...
-
子ウインドウを閉じて 親ウイ...
-
今、課題で弁論文を書いて、テ...
-
アプリがフォーカスを
-
自動的に前画面に戻る
-
デュアルコアCPUの期待度は?
-
400 Bad Syntaxって何ですか?
-
JSPで初期カーソル表示する方法
-
Dynabook 1870でUSBメモリブート
おすすめ情報