Web services Web服务、内存泄漏和CRM

Web services Web服务、内存泄漏和CRM,web-services,memory-management,memory-leaks,dynamics-crm,Web Services,Memory Management,Memory Leaks,Dynamics Crm,我有一个允许用户上传csv文件的网站。这将调用一个服务,该服务从csv读取信息,将其放入DynamicEntity对象中,并调用CRM服务来创建/更新CRM中的实体。当此服务创建/更新实体时,将启动其他插件以应用某些业务规则。这些规则还可以在CRM中创建或更新实体 这里的问题是,每次创建或更新实体时,网站正在调用的w3wp.exe进程的句柄计数都会增加,而且永远不会停止 我尝试将垃圾收集代码放入业务规则中,这减少了crmw3wp进程(由网络服务运行)的句柄数,但没有减少其他w3wp进程的句柄数。

我有一个允许用户上传csv文件的网站。这将调用一个服务,该服务从csv读取信息,将其放入DynamicEntity对象中,并调用CRM服务来创建/更新CRM中的实体。当此服务创建/更新实体时,将启动其他插件以应用某些业务规则。这些规则还可以在CRM中创建或更新实体

这里的问题是,每次创建或更新实体时,网站正在调用的w3wp.exe进程的句柄计数都会增加,而且永远不会停止

我尝试将垃圾收集代码放入业务规则中,这减少了crmw3wp进程(由网络服务运行)的句柄数,但没有减少其他w3wp进程的句柄数。我应该在调用CRM服务的Web服务上使用Dispose方法吗

我希望这是有道理的。我不太熟悉内存管理问题,因此非常感谢您的帮助。有谁能给我一些如何阻止这种情况发生的建议吗

谢谢, 尼尔

-->编辑 好的,当我调用Service.Create(DynamicEntity)方法时,句柄计数会增加。我不认为在这里放置任何代码都是有益的。当我退出包含此调用的方法/类/服务时,句柄计数保持不变。我需要知道的是,这是我应该管理的事情,还是CRM负责的事情(或者不负责,但我无能为力)

-->另一次编辑

对,这就是它的工作原理

1) 我们有CRM及其相关服务

2) 我们有另一个独立于CRM的服务,它使用CRM服务(上面的数字1)根据传递给它的csv信息创建实体

3) 我们有一个网站,允许用户上传csv,并调用上面的服务2在CRM中创建/更新实体

4) 我们有CRM启动的插件,它们使用上面的服务1来创建/更新实体


因此,用户将csv上传到网站(3),这将触发一个服务(2)。当服务2使用服务1创建实体时,服务4触发。服务4调用还使用服务1创建实体,当调用这些服务(使用Service.Create()方法)时,进程的句柄计数会增加。当方法/类/服务完成时,句柄计数保持不变,因此当整个过程再次发生时,句柄计数将再次增加。

检查您的服务、消费代码和插件中的服务引用是否包装在“using”语句中。这些句柄最终会被垃圾收集破坏,但前提是满足垃圾收集规则。但是,除非您注意到性能下降,否则我不会太担心——该平台非常健壮


如果您想更好地理解执行此操作的原因,请在.NET framework文档中查找IDisposable,并查看CRM SDK中的示例。

显示一些代码!别让我们猜!