NIFCLOUD-mbaas / UserCommunity

ニフクラ mobile backend ユーザーコミュニティ
https://mbaas.nifcloud.com/
81 stars 18 forks source link

Unityでニフクラ mobile backend がメモリエラーを起こす #1320

Closed sawada-github closed 2 years ago

sawada-github commented 2 years ago

Unity2021.3.4f1でニフクラv4.4.2を使用したのですが、以下のようなエラーが起きてしまいます。 A Native Collection has not been disposed, resulting in a memory leak. Enable Full StackTraces to get more details.

エラーが起きた箇所が表示されないので、以下の内容を参考にエラー箇所を表示するようにしました。 https://qiita.com/papparapa/items/a692714c47a7c602215e

すると、「Assets\NCMB\Script\NCMBConnection.cs:266」がエラーが原因で、以下のようなコードでした。 「req.uploadHandler = (UploadHandler)new UploadHandlerRaw (bodyRaw);」

ここをどう直せばいいのか、あるいは触っていいのかもわからないため、自分でNCMBを呼び出している箇所を確認したところ、以下のソースコードの「obj.SaveAsync()」が原因でした。

if (objList.Count == 0) {
    NCMBObject obj = new NCMBObject(table_name);
        obj.Add("count", 1);
        obj.Add("stage_id", colum);
        obj.SaveAsync();
    } else {
        objList[0].Increment("count");
        objList[0].SaveAsync();
    }
}

objListの取得部分は省略していますが、ステージIDを元に、そのステージの回数を加算していく処理です。 このコードには「SaveAsync」が2か所ありますが、両方でこのエラーが発生していますが、必ず発生するわけではなく、「SaveAsync」したときに体感で50%程度の確率で発生します。 また、ニフクラにはデータが保存されおり、このエラーが発生したときでもデータは保存されているようです。(100%保存できているとは言えませんが)

また、上記のソースコードだけでなく、同じように「SaveAsync」している箇所でも発生しています。 これらの処理は例えば秒速100回行っている、ということもなく、せいぜい1秒に1回。APIの呼び出し回数が限界に達しているようなこともありません。

このエラーはどうやって対処すればいいでしょうか?

goofmint commented 2 years ago

現在のバージョンではUnity 2021はサポート対象外となります。次期バージョンでサポート予定となっています。

sawada-github commented 2 years ago

なるほど。ありがとうございます