2010-01-19 5 views
1

Je suis en train de refactoriser du code et j'ai été confronté à un dilemme.Comment résoudre les problèmes de performance Assembly.Load?

Disons que nous avons le scénario suivant:

  1. Une base Assemblée qui contient de nombreuses interfaces communes et des classes
  2. Assemblée une bibliothèque qui contient des classes plus spécialisées.

L'assemblage de bibliothèque fait référence à l'assemblage principal. Jusqu'ici tout va bien.

Étant donné que je suis en train de refactoriser cela, il est nécessaire pour l'assemblage de base de créer des objets qui sont déclarés dans l'assemblage de la bibliothèque. OK, afin d'éviter un problème de référence circulaire, j'ai décidé de charger l'assemblage de la bibliothèque en cas de besoin (et ce n'est nécessaire qu'à un point très précis lors de l'initialisation du type).

Cependant, les performances de chargement de la chose à un abîme dégringolé sombre ...

Est-ce que quelqu'un sait comment résoudre ce problème?


Edité ajouter

Certaines personnes ont demandé le code que j'utilise pour charger ... Il est tout à fait banal, vraiment.

/* 
* Load the Library Assembly 
*/ 
Assembly asm = Assembly.Load("Library, PublicKeyToken=..."); 

/* 
* Get desired type 
*/ 
Type t = asm.GetType("Library.DesiredType") 

/* 
* Get the default constructor 
*/ 
var ctor = type.GetConstructor(new Type[] {}) 
+2

Vraiment, les performances sont devenues inacceptables en chargeant un seul assemblage au démarrage? Quelle est la taille de cet assemblage? –

+0

C'est ridicule petit: 52K (52,224 octets) –

+0

Si vous refactoring de toute façon, pourquoi ne pas refactoriser les dépendances communes dans un 3ème ensemble afin que vous n'ayez pas un problème de dépendance circulaire et donc pas besoin de compter sur le chargement dynamique? – Aaronaught

Répondre

4

L'assembly ne doit être chargé qu'une seule fois dans AppDomain. Les appels répétés à l'ensemble de chargement X doivent renvoyer l'ensemble déjà chargé. Pouvez-vous poster le code pour la façon dont vous essayez cela? Comment mesurez-vous la "performance"? Avez-vous profilé votre application pour vérifier que le hit de performance provient bien du chargement de l'assembly?

+0

Non, je ne l'ai pas encore profilé. Merci, je ferai. –

+0

Vous avez raison, le problème n'était pas le chargement de l'assemblage. c'était complètement sans rapport ... Alors, revenons à la planche à dessin! –

Questions connexes