I have a website that allows users to upload a csv file. This calls a service that reads the information from the csv, puts it into DynamicEntity objects and calls the CRM service to Create/Update entities in CRM. When this service creates/updates an entity this kicks off other plugins to apply certain business rules. These rules can also Create or Update entites in CRM.
The issue here is that the handle count of the w3wp.exe process that the website is calling increases every time the an entity is created or updated and it never comes back down.
I tried putting Garbage Collection code in the business rules and this reduces the handle count of the CRM w3wp process (run by the Network Service), but not the other w3wp process. Should I have Dispose methods on the Web Service that calls the CRM service?
I hope that makes sense. I'm not overly familiar with memory management issues so any help is appreciated. Can anybody give me some tips on how to stop this from occurring?
Thanks, Neil
--> EDIT Okay well the han开发者_开发问答dle count goes up when I call the Service.Create(DynamicEntity) method. I don't think placing any code here would be beneficial. When I exit the method/class/service that contains this call the handle count stays as it is. What I need to know is whether this is something I should be managing or is it something CRM takes care of (or doesn't take care of but I can't do anything about it)
--> Another Edit
Right this is how it works.
1) We have CRM and its related services
2) We have another service independent of CRM that uses the CRM services (number 1 above) to create entities based on csv info passed into it
3) We have a website that allows a user to upload a csv, and calls service no 2 above to Create/Update entities in CRM
4) We have plugins fired by CRM which use Service 1 above to create/update entities
So the user uploads a csv to the website (3), this fires a service(2). When service 2 creates an entity using service 1, Service 4 fires. Service 4 calls also uses service 1 to Create entities, and when these services are called (using the Service.Create() method) the handle count of the process increases. When the method/class/services finish the handle count remains the same, and so when the whole process occurs again the handle count will increased again.
Check that your service references are wrapped in 'using' statements, both in your service, the consuming code and your plugins. The handles will get torn down by garbage collection eventually, but only if the garbage collection rules are met. Unless you're noticing a degradation in performance however, I wouldn't worry too much - the platform is pretty robust.
If you want to understand better the why's and wherefores of doing this, look up IDisposable in the .NET framework documentation, and look at the samples in the CRM SDK.
精彩评论