5年前ローグライクゲームを作っています。描画時に何故か時間がかかります。newを使用してリスト構造を組み、同じように描画した時では、100個ほど生成、描画しても動作が重くならなかったのですが、vectorを使用すると10個足らずで重くなってしまいます。都合上vectorを使って作成したいと考えています。解決法を知っていらっしゃる方がおりましたらぜひご教授お願いします。具体的な数値の提示が必要だと思います。vcItem.size()ということですよね。無駄に感じるのですが。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。情報不足でした申し訳ありません。生成は一瞬で終わるため問題ありません。生成を100個ほどしても、描画さえしなければゲームが重くなることはないので生成は問題ありません。呼び出される回数は仰るとおりです。Y座標が一致した場合に描画されます。生成、描画は状態遷移プログラムにて場所がわかれているので繰り返されているということはありません。5年前iguanaさんの思い込み・勘違い等が、このコードだけでは検証できません。こちらでは確認しようがないので、iguanaさんに時間を実測してもらうしか方法がないようです。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。生成は一瞬で終わるため問題ありません。かずまさんが、具体的な計測値を出して、とレスしているのに、見当はずれな回答をしてますね。仕事であれば、「じゃ勝手にすれば」と干されますよ。時間の計測ってどうやるの?と聞けばまだいいんですけどね。生成に関しては、精度が悪いのか両方の場合で0と表示されてしまいました。47msでは、newした場合と、vectorを使った場合とで計測してみてください。生成に関しては、精度が悪いのか両方の場合で0と表示されてしまいました。正確に測定する方法はあるのでしょうか?いえ、ふつうはそこまで精度を上げることはしません。時間がかかるところを特定したいのですよね?その意味では、生成に関しては問題なさそうですね。生成に関する時間を調べたいのであれば、たくさん生成してみて、その総合時間で一つ当たりの生成時間を割り出す方法が使えます。先ほど上げた数値がvectorを使った時の数値です。6の文字がちらつくものの基本的に0から変動しませんでした。先ほど上げた数値がvectorを使った時の数値です。6の文字がちらつくものの基本的に0から変動しませんでした。して1秒(=1000msec)以上かかるってことではない、ということでよろしい?(個人的には問題ないと思ってるんですけどね)目に見えて遅いということでしたら、その根拠を示してほしいですね。【編集】書きなおしてたら、すでにレスされていたので元の文面に戻しました。目に見えて遅くなりますね。フレームレートを表示させると、20~30前後の値になります。個人的に考える原因としては、イテレータを進める処理がnew使用時のポインタを進める処理より時間がかかっているということ、です。描画回数を減らす新たなループを考えついたので、一応解決とさせていただきます。ご回答くださった皆さん、大変有難うございました。5年前コンパイラは何を使っていますか?コンパイルオプションは?特に速度に関する最適化について。VC++のデバッグモードとかだと、デバッグ用に色々とチェックが入り、newだと一瞬で、vectorだと数10ミリ秒とか、ありえるかと。コンパイラは何を使っていますか?コンパイルオプションは?特に速度に関する最適化について。VC++のデバッグモードとかだと、デバッグ用に色々とチェックが入り、newだと一瞬で、vectorだと数10ミリ秒とか、ありえるかと。その場合、最終的には最適化してコンパイルすれば問題ないですよね?それにしても遅く感じるので、iguanaさんがなにかミスをしている可能性は捨て切れません。コードを提示してもらえない以上は、ご自身で解決するしか無いわけですが、Drawを除いて計測していないのでイテレータが遅いと断言したのが本当であるか疑問が残る所です。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。目に見えて遅くなりますね。フレームレートを表示させると、20~30前後の値になります。問題ないと書きましたが、60fpsでやろうとするなら、1000/60=16.7msecなので、やっぱ問題アリです。10体生成時の描画で16msなのですから。Draw関数の内容を掲示した方がいいですよ。2013で環境も特にいじっていないので初期設定かと。新しく考えたループに書き換えたところ100個生成しても問題なく動作するようになりました。ご協力くださった方々本当に感謝を申し上げます。2013で環境も特にいじっていないので初期設定かと。コンパイルオプションとはどのように設定するものなのでしょうか2013は使ったことないけど、多分プロジェクトのプロパティで細かく設定できます。大雑把な設定のまとめが、デバッグモードとリリースモードなのですが、その違いを知らなくて、初期設定のままならデバッグモードなのでしょう。デバッグ時に有用な情報を提供してくれる替わりに、実行速度などが犠牲になっています。速い遅いの話をするときに、デバッグモードでは見当違いなのです。2つのモードのボトルネックの場所が違う場合も多いので。「アクティブソリューション構成」で切り替えることで変更できます。同じような問題に悩んだ人のために、イテレータの回数が問題であったのか、それともDraw中のループなどが問題であったのかだけははっきり記載して頂けますか。>非常に効率の悪い書き方をしていたため、ここをもう少し細かくお願いします。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。5年前なぜnewと同じ構文で遅延が発生したのかは不明です。描画関数内に描画場所を直接書き込む事によりvcItem.size()回だけで良くなりました。newと同じ構文で遅延が発生したのかは不明です。描画関数内に描画場所を直接書き込む事によりvcItem.size()回だけで良くなりました。無駄を無くしたので、解決したということですね。イテレータの問題であると言う話はどうなったのでしょうか?返答で分かることはループが13*10*100回=13000回から100回になったら余裕で間に合うようになったと言うことです。イテレータなのかDraw側なのか、あるいは両方なのかは不明のままって事ですね。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。ミクプラは自由にリンクできます。