現在作成進行中のマップエディタで、実行速度が遅い箇所がありました。それが以下のプログラム部分です。 for (int x = 0; x < w; ++x) { for (int y = 0; y < h; ++y) { var id = rscGrd.Areas[x + rcChr.X, y + rcChr.Y]; ...
タグ:高速化
C# 高速化のヒント
現在私が制作中のマップエディタで、部分消去という処理があります。この部分消去は、同じパーツが隣接していた場合に、それを間引くという機能も実装しようとしてました。そのとき、最初のコードからは 40% 程度までは高速化できたのですが、それをTwitterでもっと速くなら ...
VS2022 重い処理の改善
マップエディタの機能拡張で、連続貼り付けに対応したところ、この処理が存外に重たかったので、その調査と改善を行いました。どこが重くて、どのように調査して、どう対応していったのか、実際の対応手順を元に追い込み方について説明したいと思います。最初の状態少し長い ...
C# 事前に処理を終わらせる
前回の C# リソースを使い回すの時に、処理が遅い例としてマップの配置データの順番で表示する処理を紹介しました。この遅い理由がループの途中で Bitmapリソースの作成と解放をしているためでした。この遅い処理を事前に処理しておくとどうなるのかというプログラム例です。 ...
C# リソースを使い回す
Unity等で描画の高速化をする際によく言われるのが、ドローコールを減らすという対応です。これは描画処理を呼び出す回数を減らすという意味です。実際にはそれぞれのケースで全く対応方法は異なりますが、ここではリソースの使い回しを例として、実際にどのような内容で、ど ...
Z80 超高速ビット左右反転
私が作成した Newシティヒーローというゲームでは、消費メモリを削減するために様々なテクニックを駆使したのですが、その中でリアルタイムビット左右反転というのがあります。通常、ビット反転を行うためには8回のローテートが必要で、軽い処理ではありません。これをゲーム ...
PC-6001 描画ルーチンの高速化
今回は描画ルーチンの高速化について検証したいと思います。 前回までの描画方法 前回の描画では下記のルーチンを紹介しました。 GRPDraw2x12Sep1:: call VRMAddress ; HL 描画アドレス ex de, hl ; 描画を HL→DE の流れとする push de call .draw ; L 描画 pop de ...
C# List.Contains の高速化
マップエディタの開発で、超広範囲の選択範囲がある状態で、BGの設定を実行したところ、数分経っても一向に終わる気配がないという大問題に直面しました。今回はこのとてつもなく遅い処理を、コンマ数秒まで高速化するテクニックです。 巨大リストをY軸毎に分解する最初のプ ...
Z80 ループ展開で高速化
諸星圭さん @kmoroboshi からリクエストを頂きましたので、緊急に記事にしてみます。諸星さんが仰るとおり、Z80で処理を高速化するためには、16ビット計算は 8ビットに落とし込めないかという試行を行う事が肝要となります。前回、16bitループカウンタで最高速だった B,C を ...
Z80 スタックに纏わる話
Z80 アセンブラにとって、高速化は命題となります。その中で2バイトをまとめて処理出来る push / pop は使い方によってはかなりの高速化が期待出来るため、本来の使い方以外の使用方法がいくつも開発されてきました。今回はそんなスタック(以下、SP と略す)に纏わるお話で ...