2010-01-28 4 views
0

J'ai un service qui utilise un objet assez cher à créer. Je voudrais améliorer la performance de l'appel à l'appel. Lorsque je retire l'objet et exécute un test de charge, comme le nombre d'invocations que je peux faire par seconde, j'ai une différence de performance énorme entre les situations.Performance WCF: Puis-je créer un pool de mes objets comme le fait ConnectionPooling

Situation 1. J'enlève l'objet cher: Invocations par sec ~ = 130. Situation 2. Je l'utilise comme d'habitude, avec l'objet: le taux est ~ = 2 par seconde.

J'ai un service WCF .NET hébergé sur un serveur IIS 2008. Je me demandais si je pouvais créer un cache/pool d'objets et remettre ces objets à chaque invocation du service.

Avez-vous des commentaires ou suggestions à ce sujet?

Répondre

1

Vous pouvez exécuter le service WCF en mode par session et créer l'objet en utilisant le modèle singleton, de cette façon vous ne créez l'objet qu'une fois par session, et non une fois par appel.

Vous pouvez également mettre en cache les objets à l'aide de la mise en mémoire cache d'enterprise libray.

+0

La modification de l'accès à l'objet cher (dans ce cas, un proxy dynamique Castle) à une référence statique a résolu le problème. –

1

Si la partie coûteuse est en train de construire l'état de l'objet, et que vous voulez seulement limiter le nombre de fois que vous créez cet objet, je suggère d'utiliser un service durable.

Un composant WCF durable persiste entre les appels et entre les clients. Chaque fois que vous appelez une méthode, elle écrit son état dans un magasin de persistance (la base par défaut est une base de données SQL). Le hic, c'est que vous devez passer un jeton de contexte entre celui qui va appeler votre composant Durable. Ce jeton peut être conservé dans un fichier ou une base de données ou autre. Cela vous permettrait de faire un appel contre le composant, il pourrait créer son état une fois et vous pourriez continuer à l'appeler d'autres clients tant qu'ils ont accès à son jeton de contexte.

Rien ne traîne en mémoire puisque l'objet disparaît chaque fois que le client se ferme, mais l'état persiste. Il s'agit d'un tutorial.