みなさんは Beat Saber の mod、いくつくらいインストールしていますか?じつは、現状の Beat Saber mod の仕組みでは、mod の数が一定を超えると、一部の機能でエラーが発生してしまいます。
どんなエラーが出るのか見てみましょうか。Beat Saber 1.29.1 で、Mod Assistant に登録されている mod 全部にチェックをいれてみました。
この状態で起動してみると、あ、まだ大丈夫…。いまのところは、ぎりぎり制限にひっかからない数に収まっているようです。
それではこの環境に、さらに mod を 2, 3 追加してみると…
[ERROR @ 13:38:56 | IPA/Config] Error waiting for in-memory updates
[ERROR @ 13:38:56 | IPA/Config] System.NotSupportedException: The number of WaitHandles must be less than or equal to 64.
ログにこのようなエラーが大量に出るようになります。
Beat Saber mod の仕組みを担っている BSIPA の中には、各 mod の設定を管理してくれる部分があります。この処理の中では、いずれかの mod 設定に変更が生じたときにすぐ設定をファイルに書き込めるよう、変更を監視しているのですが、この監視できる数の上限が 64 ということになっています。
じゃあ、その 64 の数字を変更してしまえば良いじゃないか、と思われるかもしれませんが、この 64 という上限を決めているのは BSIPA ではなく、.NET フレームワークのほうなので、さくっと簡単に数を増やすのは難しいです。きたない実装にするか、まったく別の監視方式に変更するか、になってしまいます。
BSIPA としては、そんなにたくさん mod を入れる人もいないだろう、ということで、このままで実質問題ないと判断されていると思います。ちなみに、この設定の仕組みを使わない mod もあるので、エラーが出ない最大 mod 数が 64 ということではなく、もうすこし多くいれられると思います。
この部分のコードを見たい方は下記リンクを見てみてください。
https://github.com/nike4613/BeatSaber-IPA-Reloaded/blob/21873bee3caf2a67e6a33d478b5deb596c304f54/IPA.Loader/Config/ConfigRuntime.cs#L230
このエラーに関しては、即 mod が動かなくなる、というものではありません。設定を変更したときに、すぐにファイルに書き込みされなくなる、という状態が発生していますが、ゲーム終了時にも再度まとめて設定のファイル書き込みは行われるので、mod 設定の保存がされない、という事態にもならないと思います。
考えられるとしたら、ゲームを終了するまで、設定ファイルのほうは変更が反映されない状態なので、なんらかのタイミングで mod から設定ファイルを読み込むようなことがあれば、そのゲーム中で変更した mod 設定が元に戻ってしまうかもしれません。
動作速度への悪影響も (SSD なら) ほとんどないと思います。ただ、ログが 1 秒ごとに増えていくので、ログファイルが巨大になってしまいますし、他の mod に別の不具合があったとき、このエラーログが大量に出ている状況では、他の部分のログを追うのが困難になり、不具合の原因がよくわからなくなってしまうかもしれません。
mod をたくさん入れている方も大勢いらっしゃると思いますが、いれすぎるとこういうこともありますよ、という記事でした。ただ、上にも書いたように、mod が動かなくなるレベルのエラーではないので、どうしても mod の数を削れない場合は、気にしないことにしましょう。
yasさんが対策 mod を作ってくださいました!
ビーセイプレイヤーのみんなへ、ニッチなクリスマスプレゼント | yas
ConfigLimitFixer
https://note.com/yatakabs/n/nbd6eb7d34741
Sp00ky_C0de
2023-08-02 21:22:10 +0000 UTCなるるるるな / NALULUNA
2023-08-02 15:30:32 +0000 UTCSp00ky_C0de
2023-08-01 02:54:25 +0000 UTC