忍者ブログ

DTXManiaXG(ver.K)開発日誌

「-真のX-Gradeを見るまで俺は止まらない-」 DTXManiaXG(verK)の開発ブログです。

.NET Frameworkを4.7.1にバージョンアップしました。

タプル式を使うためにSystem.ValueTupleを入れたらDLLの問題で大混乱を発生してしまったので、開き直ってフレームワークを最新型にしてタプル式に標準対応させました。
これでもうDLLによる混乱は無くなるはず。
PR

4/30~5/3 メモリリーク大幅修正で修正した点

実家に帰ってた時、偶然にもメモリリークしているテクスチャがどこにあるのかが表示されるようになったので色々原因を突き止めてました。

その中で一番重要な点を書いておきます。(今後の再発防止)

(CActivity管理下のクラス)On活性化、OnManagedリソースの生成メソッドで再侵入検知をしていない
解放せず同じCTexture変数に再度テクスチャを生成するとメモリリークが発生します。
つまり既に生成されているかチェックしていないにも関わらず、先に挙げた2つのメソッドに侵入するとメモリリークが何回も発生するわけです。
CActivityには活性化したかのフラグか存在しているので、

if( !this.活性化していない) {
}

このように書いてやるのが正解です。

これは普通のCTextureも同じで、選曲画面で画面からはみ出した曲名テクスチャをきちんと解放していなかったのがだいぶまずかったです。
さらにバー中央の曲名テクスチャに関しても、生成前に一度解放処理を行ってから生成するようにしました。
解放処理が挟まると重くなると見せかけて、(あくまでも自分の環境ですが)こちらのほうが速いという新事実。

それからC# 6.0以降は「Null条件演算子」なるものが使えます。

this.txTEST?.Dispose();

現行版ではヘルパーメソッドとして「CDTXMania.t安全にDisposeする( ref Object)」を用いているのですが、この演算子でショートカットできるというわけですね。
ただ全部のコード全箇所での変更にはだいぶ時間がかかるので、TJAP2fPCやVer.Kでの最適化はもう少し後になるかと。
(※FROM先生のDTXMatixxを参考にしました。)

メモリリーク解決に向けて

皆様ご存知の通り、Ver.Kにはメモリリークという致命的な不具合が存在しています。

で、このメモリリークについてですが、
つい先日、Ver.Kの派生プロジェクト「TJAP2fPC」の派生プロジェクト(これもうわかんねえな)の「TJAPlayer3」の開発をしているAioiLight氏がメモリリーク対策をしたコードのスクショをツイートしていまして。
それがCTextureクラスのIDisposable実装を作り変えたという内容でした。
Dispose実装を修正するという発想に目からウロコ。

それから「選曲画面で動けば動くほどメモリが消費される」とのことで。
これは曲名描画処理を行っているPrivateFont(またはPrivateFastFont)クラス周辺の解放ミスでした。
AioiLight氏も実証していますが、曲名描画処理を消すとメモリの推移はほぼ正しいものになります。


....みたいな記事を書いてたら引っ越しの準備に追われ、気がつけば1ヶ月経っていました。
めちゃくちゃ忙しすぎて今もギリギリな状況でこの記事を復活させている段階でございます。

で、この記事を保存したのが3月13日22時58分。
この前日と3日後にDTXMania本家でも新たなメモリリーク対策が行われています。
これを適用したVer.Kが...ごめんなさい。まだ用意できてないです。
少なくとも今コミットしてないやつを放ったらかしたままどっか行くとかはしないので、期待しないで待って頂けたら幸いです。

リリース予告

この記事は「DTXMania Advent Calendar 2017」24日目の記事です。


さて、今月25日をリリース目標にして頑張っていたDTXManiaXG(Ver.K)4.00ですが、



正直...全く終わりそうにありません。
先月から多忙により、開発に時間を割くことができませんでした。

9月の終わりから一通り演奏できるんじゃないかレベルになっていたXG風表示は置いて、(これがなければみんなVer.Kを使わないとも言える)GITADORA風表示に着手しました。
時間が取れないながらも選曲画面、演奏画面と少しずつ手を加えていき、まあそれっぽく見えるんじゃないかレベルまではできています。
特に画像パーツを作る暇が無かったので「数字フォント」は致命的です。

不足点が多いとはいってもリリースしないわけにはいかないので、予定どおり25日にリリースしたいと思います。

なお、4.00以降はXGとGITADORAの表示が1つの本体で実現できます。というかできました。
これによって長いこと問題になっていた「XG本体とGD本体の格差」が解消されるはず。

出来ることは全てやりました。
皆様、明日は思う存分がっかりしてやってくださいorz
(※さらにデモ動画用の譜面も無い)


・明日の予告先発
有終の美を飾ることもない最終日の担当は山奈MIRさんです。というか私です。

DTXMania Advent Calendar

(たしか)2年ぐらい前からやりたかったことを実現しました。

DTXMania Advent Calendar - Adventar

あるテーマに対する記事をみんなで持ち寄って投稿するみたいなアレです。
特徴は日ごとに担当者を決めて1日1記事ずつ書く。これを12月1日~25日まで毎日するということです。
(Webでの)AdventCalendarが何なのかとか細かいことはこの辺を参照。
過去に作成されたものも見れるので、それも参考にしていただければ。
サイトへの登録が必要になりますが、Twitter、Github、Google+、facebookのアカウントの連携で登録できます。

記事条件
  • DTXManiaに関係している
  • 例外としてStrokeStyleもOK
  • 掲載する媒体がSNS上ではない(ブログ、Gist、Pastebinあたり推奨)
これさえ満たしていればOK。1人で複数日担当するのもOK。
知ったきっかけ、譜面作り、開発など何でもどうぞ~
(※当日にリンクを貼り付ければいいので、時事ネタを書かない限りは当日書かなくても問題ありません。)

ちなみに記事の執筆時点(2017/11/27 21:40)では登録者は1人だけです。
○参加者
1日目 kairera0467
2日目 kairera0467
~参加者未定~
25日目 kairera0467(山奈MIR名義)

かわいそうすぎますので、どんどん登録してください。

プロフィール

HN:
kairera0467
年齢:
21
性別:
男性
誕生日:
1997/08/11
自己紹介:
DTXManiaの新人開発スタッフ。
Maill:gennsou76573●gmail.com
(●を@に変えてくださいね。)

最新リリース

Twitter

ブログ内検索