1

J'ai un site Web qui permet aux utilisateurs de télécharger un fichier csv. Cela appelle un service qui lit les informations de la commande csv, les place dans des objets DynamicEntity et appelle le service CRM pour créer/mettre à jour des entités dans CRM. Lorsque ce service crée/met à jour une entité, cela déclenche d'autres plugins pour appliquer certaines règles métier. Ces règles peuvent également créer ou mettre à jour des entités dans CRM.Services Web, fuites de mémoire et CRM

Le problème ici est que le nombre de handles du processus w3wp.exe que le site Web appelle augmente chaque fois qu'une entité est créée ou mise à jour et qu'elle ne revient jamais.

J'ai essayé de mettre du code Garbage Collection dans les règles métier, ce qui réduit le nombre de handles du processus CRM w3wp (exécuté par le service réseau), mais pas l'autre processus w3wp. Dois-je disposer des méthodes sur le service Web qui appelle le service CRM?

J'espère que cela a du sens. Je ne suis pas trop familier avec les problèmes de gestion de la mémoire, donc toute aide est appréciée. Quelqu'un peut-il me donner quelques conseils sur la façon d'empêcher cela de se produire?

Merci, Neil

- Méthode> EDIT Bon bien le nombre de handles monte quand je l'appelle la Service.Create (DynamicEntity). Je ne pense pas que placer un code ici serait bénéfique. Lorsque je quitte la méthode/classe/service qui contient cet appel, le nombre de handles reste tel quel. Ce que je dois savoir, c'est si c'est quelque chose que je devrais gérer ou est-ce quelque chose que CRM prend en charge (ou ne s'occupe pas mais je ne peux rien y faire)

-> Autre édition

Voici comment cela fonctionne.

1) Nous avons CRM et ses services connexes

2) Nous avons un autre service indépendant de CRM qui utilise les services de CRM (numéro 1 ci-dessus) pour créer des entités sur la base d'informations csv passé dans ce

3) Nous avons un site Web qui permet à un utilisateur de télécharger un csv, et appelle le service n ° 2 ci-dessus pour créer/mettre à jour des entités dans CRM

4) Nous avons des plugins tirés par CRM qui utilisent Service 1 ci-dessus pour créer/mettre à jour des entités

So L'utilisateur télécharge un csv sur le site (3), ce qui déclenche un service (2). Lorsque le service 2 crée une entité en utilisant le service 1, le service 4 se déclenche. Les appels Service 4 utilisent également le service 1 pour créer des entités et lorsque ces services sont appelés (à l'aide de la méthode Service.Create()), le nombre de handles du processus augmente. Lorsque la méthode/classe/services terminent le nombre de handles reste le même, et lorsque le processus entier se produit à nouveau, le nombre de handles augmentera à nouveau.

+0

Montrez du code! Ne nous fais pas deviner! –

+0

a ajouté modifier ci-dessus – Neil

Répondre

0

Vérifiez que vos références de service sont enveloppées dans des instructions 'using', à la fois dans votre service, le code consommateur et vos plugins. Les poignées seront finalement détruites par la collecte des ordures, mais seulement si les règles de garbage collection sont remplies. Sauf si vous remarquez une dégradation des performances, je ne m'inquièterais pas trop, la plate-forme est plutôt robuste.

Si vous voulez mieux comprendre pourquoi et comment cela se fait, recherchez IDisposable dans la documentation du framework .NET et examinez les exemples dans le SDK CRM.