【发布时间】:2011-05-12 17:16:23
【问题描述】:
我们在 Out Of Browser Silverlight 应用程序中托管旧版 COM 组件时发现了这个问题,首先认为这是我们的 COM 组件的问题。
但是,将其缩小到托管可以想象的最基本的 COM 组件仍然存在内存泄漏。这个用于测试的 COM 组件是用 .NET 编写的,每次触发计时器时都会将事件简单地发送回 Silverlight 应用程序。每个事件仅包含一个字符串。
运行 Silverlight 应用程序时,进程内存使用量不断增长。探查器显示托管内存没有增加,这表明 Silverlight 运行时/COM 实现中存在泄漏。
有没有其他人看到过这个问题,如果有,您是否能够解决它?
编辑: 现在可以在http://bitbucket.org/freed/silverlight-com-leak 上获得 Repro 项目
【问题讨论】:
-
谁在分配字符串?可能是字符串内存泄漏。如果 COM 组件正在分配字符串,它也必须释放它。
-
在我的测试示例中,COM 组件是在 .NET 中实现的,字符串只是一个普通的托管字符串。我不知道旧版 COM 组件如何分配其字符串,但同一组件在 .NET 中托管时不会泄漏。
-
好吧,你说服了我。这并不难,没有其他可看的。您需要 Microsoft 支持来解决互操作错误,并准备好您的信用卡。
-
@Hans - 我在 Silverlight 论坛 (forums.silverlight.net/forums/p/210055/494295.aspx) 上发布了一个错误报告,希望我能得到一些官方反馈。
-
@Freed:你能把代码贴出来吗?
标签: silverlight com memory-leaks