Partage de technologie

Unity Erreur Une collection native n'a pas été supprimée, ce qui a entraîné une fuite de mémoire.

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Une collection native n'a pas été supprimée, ce qui a entraîné une fuite de mémoire. Allouée à partir de :
Unity.Collections.NativeArray1:.ctor(Byte[], Allocator)
UnityEngine.Networking.UploadHandlerRaw:.ctor(Byte[])
UnityEngine.Networking.UnityWebRequest:SetupPost(UnityWebRequest, WWWForm)

Le texte complet de l'erreur est comme ci-dessus

Voyons d'abord les solutions

en utilisant (var request = UnityWebRequest.Post(serverURL, "POST"))
en utilisant (var uh = new UploadHandlerRaw(bodyRaw))
        {
//request.disposeUploadHandlerOnDispose = true;
//request.disposeDownloadHandlerOnDispose = true;
//request.disposeCertificateHandlerOnDispose = true;
request.SetRequestHeader("Contenu-Type", "application/json;charset=utf-8");
rendement retour demande.SendWebRequest();
        }

Cela peut être résolu en combinant deux utilisations

Après avoir vérifié de nombreuses informations sur Internet, de nombreuses personnes ont déclaré que le gestionnaire de téléchargement qu'ils avaient créé n'était pas publié, ce qui a provoqué une fuite de mémoire.

Beaucoup de gens disent d'utiliser

//request.disposeUploadHandlerOnDispose = true;
//request.disposeDownloadHandlerOnDispose = true;
//request.disposeCertificateHandlerOnDispose = true;

Ce sera bien si vous définissez ces trois paramètres, mais je l'ai essayé et l'effet n'était pas idéal. Cela peut être dû à des problèmes avec Unity lui-même ou à des changements.

Ensuite, j'ai pensé : est-il possible de libérer le gestionnaire de téléchargement manuellement ? Essaie,

demande.uploadHandler.Dispose();

L'effet n'est pas idéal. J'ai même entendu un vieil homme sur Internet dire d'utiliser un constructeur pour le créer.

byte[] bodyRaw = Encodage.UTF8.GetBytes(send_data);
webRequest.uploadHandler = nouveau UploadHandlerRaw(bodyRaw);

Le même effet n’est pas idéal.

puis dans

Une collection native n'a pas été supprimée, ce qui a entraîné une fuite de mémoire. - Forum Unity

La solution se trouve tout en bas de cette page. Merci mon ami. J'ai résolu un problème qui me dérangeait depuis longtemps.

J'ai découvert ce forum sur le blog d'un autre auteur.

https://blog.csdn.net/Miner_W/article/details/129400923

Merci également à ce vieil homme.