NIFCLOUD-mbaas / UserCommunity

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

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

Open sawada-github opened 1 year ago

sawada-github commented 1 year ago

以前も同じ内容で以下の投稿をしたのですが、再び現象が発生したため、再度投稿させていただきます。 https://github.com/NIFCLOUD-mbaas/UserCommunity/issues/1320

以下、以前の投稿からコピペしたものですが、ニフクラのバージョンのみ違っています。 ---ここからコピペ--- Unity2021.3.4f1でニフクラv4.5.0を使用したのですが、以下のようなエラーが起きてしまいます。 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の呼び出し回数が限界に達しているようなこともありません。

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

以前の投稿ではSDKのバージョンが対応していないということで、それはしょうがないのので投稿をクローズしたのですが、 その後に公開されたUnity2021対応に対応しているバージョンのSDKを使用しても同じエラーが出る、という状態です。unityのバージョンは変わっていません。

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

goofmint commented 1 year ago

こちら、開発チームに聞いています。少々お時間ください。

goofmint commented 1 year ago

こちら再現確認できました。SDK側のIssue登録しましたので、今後はそちらをご確認ください。

https://github.com/NIFCLOUD-mbaas/ncmb_unity/issues/235