2010-12-15 4 views
1

Je travaille sur un projet dans lequel nous devons enrouler du code hérité contenant un grand nombre de variables statiques C# dans un service WCF. Comme vous pouvez l'imaginer, c'est un cauchemar pour un service WCF où les demandes devraient être sans état.CreateInstanceFromAndUnwrap Vitesse et optimisation

Sans une réécriture majeure, la meilleure solution que je peux trouver est d'exécuter le code hérité dans un AppDomain séparé afin qu'il soit thread-safe et j'ai utilisé CreateInstanceFromAndUnwrap() pour y parvenir. J'ai obtenu le code de travail mais le problème est assez lent car maintenant pour chaque requête WCF unique, il doit recharger toutes les DLL 20+ dans un AppDomain avant même que le code commence à s'exécuter.

Je me demande simplement si quelqu'un sait comment optimiser CreateInstanceFromAndUnwrap()? Par exemple, est-il possible de pré-charger tous les assemblages sans charger la classe afin que les variables statiques soient réinitialisées à chaque fois qu'une requête arrive?

Cheers, Oscar

Répondre

0

Court de savoir comment vous pouvez faire exactement ce que vous demandez, au moins je veux partager mes réflexions sur la question:

  • Pouvez-vous aller pour l'état de session ? Cela ne fonctionne pas très bien, mais si vous pouviez charger un AppDomain pour chaque session, vous pourriez obtenir une bonne réactivité. Cela dépend du nombre d'utilisateurs simultanés que vous avez.
  • Pouvez-vous avoir une autre zone qui sert de pool d'AppDomains, séparant ainsi le coût de création de l'AppDomain de la diffusion de la requête?
  • Est-ce que c'est un peu déterministe de voir comment toutes les statistiques se rejoignent? Sont-ils peut-être paresseusement chargés? Peut-être avec un peu de réflexion ou avec des méthodes dynamiques, vous pourriez réussir à effacer l'état statique après la demande.