2010-09-07 8 views
1

Je dois transmettre une sorte d'identifiant au code non géré qui traite ensuite une requête et rappelle dans mon code managé une fois qu'il a effectué un traitement. Je me demandais s'il ne vaudrait pas mieux créer un GCHandle et le passer au code non managé pour ensuite récupérer l'objet une fois que le code non managé a passé le GCHandle ou s'il vaudrait mieux créer un dictionnaire global de (disons entiers) qui associent l'objet à cette clé.Dictionnaire global par rapport à GCHandle

Merci pour l'aide!

Jusqu'à

Répondre

0

Si vous ne disposez pas de passer en fait l'objet géré au code non managé, je voterais pour un dictionnaire global. L'inconvénient de l'utilisation de dictionnaire peut être le besoin de synchronisation de thread. Un problème avec GCHandle est que cela impose une charge supplémentaire sur le GC et que vous devez faire le nettoyage etc.

+0

Je me posais aussi des questions sur les performances. Je peux juste faire un petit test et vous faire savoir ce qui me donne de meilleurs résultats. Le nettoyage ne devrait pas être trop difficile cependant. –

1

Je viens de créer un million d'instances d'une classe et je l'ai ajouté à un dictionnaire en créant des clés entières aléatoires. De même, j'ai créé un million d'objets et créé des GCHandles pour eux.

L'utilisation de GCHandles prend environ 60% du temps nécessaire pour ajouter les objets au dictionnaire.

Merci pour l'aide!

Questions connexes