Bonjour,
J'ai un gros soucis de fuite de mémoire dans un code maison.
Le programme charge un millier d'objets pour une occupation mémoire de 150Mo environ (ce qui est déjà énorme mais pas encore le soucis). Chaque objet quand il est travaillé charge une cinquantaine d'objets similaire en plus, puis on détruit l'objet travaillé.
L'occupation mémoire commence donc à 150Mo puis grimpe à 1,5Go pour redescendre à 40Mo selon le gestionnaire des tâches avant de crasher.
L'occupation mémoire commence à 150Mo puis grimpe jusqu'à 1,7Go avant de crasher selon MyProcess.PrivateMemorySize64.
L'occupation mémoire géré par le garbage collector reste à 20Mo environ.
Je cherche donc des pistes pour savoir où je merde.
List lADObject = ADSearcher.findAllObjects(ad, String.Empty, true);
while (lADObject.Count != 0)
{
ADObject ado = lADObject[lADObject.Count - 1];
insertADObject(ado);
lADObject.Remove(ado);
ado=null;
}
# ahah
Posté par Sylvain (site web personnel) . Évalué à -7.
C'est quoi le c# ? la daube de microsoft ? a moins que tu taff sous mono :p
[^] # Re: ahah
Posté par grid . Évalué à 0.
[^] # Re: ahah
Posté par Johands . Évalué à 3.
Mais sinon, outre le fait que poser une question C# sur linuxfr.org reste un énorme troll, en lisant les 7 lignes de codes ala Allman avec mes lunettes de wanabee dev C++, je vois:
* une liste "lADobject" qui semble remplie et vidée correctement
* un puits magique où les éléments "ado" disparaissent avec "insertADObject"
* un élément source "ad" d'où proviennent les objets mais _qu'on ne vide jamais_.
Voilà donc t'aurais pas oublier de faire un pseudo remove "ado" from "ad"; ?
sinon tu peux utiliser Haskell, c'est aussi développé par trois barbus de MS Research mais ils ont au moins le bon goût de fournir des outils de profiling pour ce genre de soucis :p
[^] # Re: ahah
Posté par stopspam . Évalué à 2.
Ce qui m'énerve le plus dans C#, outre le fait qu'il essaie de copier python sans jamais lui arriver à la cheville, c'est le nom des méthodes.
"findAllObjects" : faut être sérieusement atteint et irréfléchi pour pondre des merdes pareilles. "findAll" aurait été largement suffisant. Ici faut encore se rappeler de "Object" et savoir si on le met au singulier ou pluriel (wai je sais "all" donc plusieurs mais bon, si en plus je dois connaître l'orthographe anglais). Tous les jours je peste contre ce langage, imposé au boulot ;( (Enfin je me réconforte en me disant que mon collègue à côté est tombé sur windev).
Bref, il y a 10.000 méthodes comme ça et honnêtement sans visualStudio et la complétion je suis une vraie brelle en c#.
[/coup de gueule]
[^] # Re: ahah
Posté par Johands . Évalué à 4.
comment ça je m'écarte du sujet ?
[^] # Re: ahah
Posté par Croconux . Évalué à 1.
Qu'est-ce qui te fait dire c'est une méthode du framework et pas une méthode d'une classe du monsieur ?
Dans le framework, des règles de nommage strictes sont appliquées.
- Pascal casing (ce serait plus FindAllObjects dans ce cas).
- La notation hongroise est découragée (le lADObject préfixé par un "l" pour dire que c'est une liste).
Donc visiblement c'est du code maison. Du coup, toutes tes remarques "ton langage est moins bien que le mien" font plop.
[^] # Re: ahah
Posté par pasBill pasGates . Évalué à 3.
C'est bien, tu viens de comprendre que la valeur d'un ingenieur ce n'est pas ce qu'il connait par coeur, mais son systeme de pensee.
Que le nom de la methode soit un probleme sans completion tout le monde s'en fout, il n'y a aucune raison qui t'empecherait d'utiliser la completion.
[^] # Re: ahah
Posté par zerkman (site web personnel) . Évalué à 5.
# C'est bon, c'est fini
Posté par Midilaïr (site web personnel) . Évalué à 2.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.