Memory management 工作者角色从合理的内存使用开始,但随后内存使用会不断增加

Memory management 工作者角色从合理的内存使用开始,但随后内存使用会不断增加,memory-management,pinvoke,azure-worker-roles,Memory Management,Pinvoke,Azure Worker Roles,我有一个运行多个线程的工作者角色(我使用)。我的工作者角色下载一些数据,然后下载与该数据相关的图像。本地一切都很好,但当我在azure上部署应用程序时,它首先显示合理的内存使用量(48MB),然后在1到2小时内达到800MB。我的应用程序确实关心如何使用大量“using”语句处理对象,并正确关闭流。但我仍然想知道是什么原因导致内存跳到这么高的值。还有一件事,我使用了RETSLib(PInvoke库来访问RETS服务器),它可以下载数据和图像。这可能是非托管代码的问题吗?这肯定是非托管代码内存泄漏

我有一个运行多个线程的工作者角色(我使用)。我的工作者角色下载一些数据,然后下载与该数据相关的图像。本地一切都很好,但当我在azure上部署应用程序时,它首先显示合理的内存使用量(48MB),然后在1到2小时内达到800MB。我的应用程序确实关心如何使用大量“using”语句处理对象,并正确关闭流。但我仍然想知道是什么原因导致内存跳到这么高的值。还有一件事,我使用了RETSLib(PInvoke库来访问RETS服务器),它可以下载数据和图像。这可能是非托管代码的问题吗?

这肯定是非托管代码内存泄漏的问题。RETSLib是librets上的.net包装器吗?对librets的php实现的一些参考

您提到“下载一些数据,然后下载与该数据相关的图像”。您是使用实体框架获取初始数据还是将其存储到SQL中?如果是这样,我假设您处理了ObjectContext。EF 4.0似乎存在一些内存问题。
一个谈论这个的人


本可以将此作为评论添加,但stackoverflow不允许我这样做,因为我的代表分数较低

Thanx无法快速回复。是的,我正在使用librets(.net wrapper),而我根本没有使用EF。还有一件事,当worker角色处于运行状态时,我肯定无法卸载非托管库。如何处理此泄漏?卸载dll不会解决内存泄漏问题,因为加载操作会将dll加载到应用程序的进程空间中。您可以尝试将dll加载和卸载放在一个单独的进程中,然后终止该进程(?)