2010-06-28 3 views
0

Histoire commune: Je développe une extension ArcMap en utilisant C#. La plupart des problèmes peuvent être résolus en utilisant toutes sortes d'outils de géotraitement d'ArcToolbox. Ce qui est généralement plus conseillé:Dois-je créer un nouvel objet de géoprocesseur pour chaque outil de géotraitement?

  1. Création d'un nouvel objet de géoprocesseur pour chaque outil?
  2. Réutiliser un seul objet de géoprocesseur?

Lorsque 1) est recommandé, dois-je libérer l'objet com après l'exécution d'un seul outil? Qu'en est-il d'appeler GC.Collect()?

Lorsque 2) est recommandé, est-il une bonne méthode de l'instancier une fois et de le réutiliser encore et encore, par exemple en utilisant le modèle singleton?

Mon expérience personnelle est qu'en utilisant la deuxième méthode, je rencontre de graves violations d'accès mémoire lors du débogage de mon code.

Répondre

1

Je choisirais probablement de créer un nouvel objet pour chacun. Si vous utilisez plusieurs threads, il est de toute façon nécessaire d'éviter la synchronisation.

Et oui, vous devez libérer chaque objet com dès que possible, mais n'appelez pas GC.Collect().

Voir ici: http://msdn.microsoft.com/en-us/library/ff647812.aspx

Questions connexes