オブジェクトハンドル表示時のモタつきを軽減。ClifeUI更新

ClifeUIでは、本カスタムUIで追加している機能以外は標準UIの動作(ソース)そのままを使用しているのですが、オブジェクトハンドル(以下、オブハン)を表示するときのモタつき&オブハンを表示している時の負荷が大きいのが気になっていたので、標準UIの関数を置き換える事で動作を改善してみました。

ClifeUIのダウンロードはこちらのページからどうぞ。

更新内容

オブハンを表示する為の標準UIの関数 ObjectHandleWindow.CreateObjectHandles 等を置き換える為のファイルを追加しました。
設定等の必要は無く、ClifeUIのインストール&UIを選択するだけで有効になります。
※ 置き換えると言っても、物理的にファイルを上書きするのでは無く、カスタムUI側で関数名等を置き換えているだけなので、インターフェースの選択を標準UI(デフォルト)に戻すと標準の動作に戻ります。

ベンチマークを取って比較した訳ではありませんが、デフォルトUIとClifeUIを切り替えて、それぞれでオブハンを表示していただければ(オブジェクトが多い所だと特に)違いが分かると思います。(ハイスペックなPCだと違いが分からないかも ^^;)
# と言うか、ECのカスタムUIでベンチマークを取る方法(マイクロ秒を正確に取得出来る方法など)をご存じの方がいらっしゃったら是非ご教示くださいませ。。。

モタつきを軽減した仕組み

簡単に言うと、標準UIで使用されているソースのうち、オブハンを表示する処理で最適化が充分では無かった部分をカスタムUIで置き換えました。

ここからは若干技術的な内容になりますので、興味がお有りの方だけご覧くださいね。

一番大きく効いているのは、各オブハンのウィンドウから呼び出されていたイベントハンドラの OnUpdate (※)をやめさせ、その代わりに、オブハンを表示している時には OnUpdate 用の(不可視の)ウィンドウを追加するように変更した部分です。
(※ ざっくり言うと、クライアントのプロセスが更新されるたびに呼び出されるイベントで、これを指定したウィンドウごとに関数が実行されます。)
これにより、オブハン表示時にオブジェクトの数の分だけ OnUpdate が実行されていたのを、オブハン用の OnUpdate が呼び出されるのをオブジェクトの数とは関係無く1つだけにしました。
(現状ではオブジェクトごとに OnUpdate を呼び出す必要は無かったので)

あとは、オブジェクトの数だけオブハンを表示する為のループに入る前に処理可能な物がループの中で処理されていた部分をループ以前に処理するように変更したり、その他細々とした変更をしています。

参考:効果が実感できた環境

「オブハン表示くらいでモタつくとかw」と言われると泣いてしまうので、その辺りのツッコミは無しでお願いします ^^;
実際、自分もそこまで困っていた訳ではないのですが、それほど重い処理とは思えないのに表示するのに若干モタつく&表示中は明らかに負荷が掛かっているのが気になりソースを見てみたら改善の余地があるコードだったので。
(何世代も前のPCでお恥ずかしい限りですが)目安になるかもしれないので効果が実感できた環境を一応書いておきますね。

  • Windows10 pro(64bit)
  • Core i7-4790K (4.0~4.4GHz)
  • 32GB Memory(DDR3-1866 CL10 8GB×4)
  • GeForce GTX960
  • Intel SSD 730 480GB + CFD SSD 240GB + 他 HDD

こんな感じのPCでオブハン表示時にモタついていたのが結構改善されました。
これと似た様な環境なら間違い無く効果が実感できると思います。

 

コメントを残す

※ 送信されたコメントは、管理者の承認後に公開されます。