質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

1回答

17522閲覧

Processing実行中のCPU使用率が異常に高い

wwuuccccii

総合スコア13

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2018/04/21 07:21

Processing実行中にタスクマネージャーを見てみると、Java(TM) Platform SE binaryが常に30%以上ものCPUを使っています。数行程度の簡単なコードでも一度走らせるとその後ずっとCPUが働いているようです。
Windows 10 proを使用していて、Javaも新しいものをインストールしました。
解決策を教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

訂正:
回答コメントのやりとりからProcessingの動作モデルの把握云々の問題ではなくProcessing自体の問題であるように思えました(確証があるわけではないのですが自分の環境でも3.3.6では問題なく、3.3.7で再現したからです)

回答コメントにも書きましたが、3.3.7の利用を止めて3.3.6を試すことをお奨めしてみます。

なおProcessingは(少なくともデフォルトでは)PCにインストールされているJREではなくProcessing自身に同梱されたJREを使うようになっていますので、PCにインストールされているJavaバージョンには左右されないと思います。

以下は元の回答

コードがないので推測でコメントします。

質問者さんはProcessingの基本動作、すなわち「setupは最初だけ起動される」「drawはごく短い期間中に何度も呼び出される」という点をよく把握しておられないのではないでしょうか?

void setup() { size(100, 100); } void draw() { text("hello world", 50, 50); }

drawは概ね10msecぐらいごとに何度も呼び出されます。

上のコードのように同じ内容の処理をdrawで毎回やってないでしょうか?例えば固定的な描画ならsetupで一度だけやればいいのですがそれを毎回drawでやるとそれなりのCPUを消費してしまうと思います。

上の例でしたら下のようにするのが妥当です。

void setup() { size(100, 100); text("hello world", 50, 50); } void draw() { // 特に何もしない }

追記:もう少し具体例を挙げてみます。300個ぐらいの円を描画する以下のコードを自分の環境(Windows 10 64bit)実行してみるとだいたい20%ぐらいのCPU使用率でした。
drawEllipsesをsetupで呼び出すように変えると見た目はかわらず、CPU使用率はほぼ0%になりました。

どの程度の描画でどのくらいの負荷がかかるかの実例として参考になればと思います。

int N = 300; float[] xs = new float[N]; float[] ys = new float[N]; float[] rs = new float[N]; color[] fills = new color[N]; color[] strokes = new color[N]; void setup() { size(500,500); for (int i = 0; i < N; i++) { xs[i] = random(width); ys[i] = random(height); rs[i] = 10 + random(10); fills[i] = color(random(256), random(256), random(256)); strokes[i] = color(random(256), random(256), random(256)); } } void draw() { drawEllipses(); } void drawEllipses() { fill(0); noStroke(); rect(0,0,width,height); for (int i = 0; i < N; i++) { fill(fills[i]); stroke(strokes[i]); ellipse(xs[i], ys[i], rs[i], rs[i]); } }

追記:最初つづりを間違ってdrawEllipsysとしてました。drawEllipsesに訂正しました。
お恥ずかしい限りです。orz

投稿2018/04/21 07:33

編集2018/04/21 09:22
KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wwuuccccii

2018/04/21 08:15

ご回答ありがとうございます。 追記にていただいたコードでsetupとdrawにおいた場合を比較してみましたが、差がありませんでした。。 コードの描画を停止してみてもCPU使用率は変化しなかったので、他のアプリとの関係から生じるトラブルなのかなと思います。ご丁寧にお答えいただいたのにすみません。 まだ解決しておりませんので、もし他の原因がお分かりでしたら教えてください。
KSwordOfHaste

2018/04/21 08:20

setupの最後を  ...  drawEllipsys() } としてdrawでは何もしないように void draw() { } と書けば0%ぐらいになるはずですがdrawのところにdrawEllipsysを残したままにしてませんか?
wwuuccccii

2018/04/21 08:23

コメントありがとうございます。 残さないで全てsetupに移してから描画させました。
KSwordOfHaste

2018/04/21 08:47 編集

なるほど・・・ひょっとするとProcessingの問題かも知れませんね。 Processingのバージョンは何でしょう?またOS, Javaのバージョンはわかりますか? --- 失礼しました。OSはWindows 10ですね。 (自分はWindows 10 home 64bit 1709, Processing 3.3.6で動かしてました。ブラウザーや他のIDEも動かしておりメモリーは不足気味です。8GBしか積んでないので)
KSwordOfHaste

2018/04/21 08:42

Processingの問題だとすると厳しいですが回避策としてsetupの最後で frameRate(5); のようにdrawを呼び出す頻度を変更すると改善するかも知れません。5を指定すると1秒間に5回程度drawが呼び出されるようになります。デフォルトは60ぐらいだったと思います。
wwuuccccii

2018/04/21 08:50

Processingは3.3.7を使用しております。 Windows 10 Pro、Java 8です。 frameRateを変更しても解決いたしませんでした。。簡単なコードと複雑なコードでもCPU使用率は変化しませんでしたので、やはり構造上の問題かもしれません。
KSwordOfHaste

2018/04/21 09:09

3.3.7をDLしてやってみたところ再現しました。 なるほどdrawでなにもしてなくてもCPU30%です。 これは・・・バグのように思えますがもうちょっと探ってみます。
KSwordOfHaste

2018/04/21 09:17

void setup() { println(javaVersionName); println(System.getProperty("java.home")); size(500, 500); frameRate(1); } void draw() {} これをためしたところ、 3.3.6ではJRE 1.8.0_144 3.3.7ではJRE 1.8.0_162 いずれもProcessingに同梱されているJREが使われています。そのJREは Processing.exeがあるディレクトリーと同じところにあるjavaディレクトリーの下に入っています。ためしにjavaディレクトリーの下を 3.3.6のもの(1.8.0_144)に入れ替えてみたところ再現しなくなりました。 かなりインチキな方法なのでお勧めはできませんが、やはりProcessingの環境に問題があるように見えます。 3.3.7の利用を止めて3.3.6をDLして試してみることをお奨めします。
wwuuccccii

2018/04/21 14:13

3.3.6をインストールして描画してみましたところ、CPU使用率が大幅に下がりました! バージョンを下げるという方法はまったく思いつきませんでした。。 ご丁寧に対応してくださり本当に助かります。 ありがとうございます。
KSwordOfHaste

2018/04/21 14:21

良かったですね。 そちらでも改善が見られたということはやはり3.3.7の問題なのかも知れません。ちょっと意外でした。こちらこそ参考になりました。情報ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問