C# Silverlight内存泄漏

C# Silverlight内存泄漏,c#,silverlight,red-gate-ants,C#,Silverlight,Red Gate Ants,我们有一个相当大的silverlight 4应用程序。我们正在查找应用程序中的内存泄漏,这已成为一项艰巨的任务 这篇文章彻底改变了一切,对于那些看过原始文章的人来说 我意识到ANTS内存分析器没有向我显示正确的内容。这是因为内存泄漏不在托管代码中,而是在本机代码中。我确实用ANTS解决了一些问题——它是一个很好的托管代码内存泄漏工具 所以我找到了这个博客 太棒了。我使用xPerf和xPerfViewer查看本机堆,并查看我怀疑的实际内存泄漏 所以我可以看到一个堆栈跟踪,看起来像这样 CCore

我们有一个相当大的silverlight 4应用程序。我们正在查找应用程序中的内存泄漏,这已成为一项艰巨的任务

这篇文章彻底改变了一切,对于那些看过原始文章的人来说

我意识到ANTS内存分析器没有向我显示正确的内容。这是因为内存泄漏不在托管代码中,而是在本机代码中。我确实用ANTS解决了一些问题——它是一个很好的托管代码内存泄漏工具

所以我找到了这个博客

太棒了。我使用xPerf和xPerfViewer查看本机堆,并查看我怀疑的实际内存泄漏

所以我可以看到一个堆栈跟踪,看起来像这样

CCoreServices::Draw
    CCoreServices::Tick
    CUElement::Render
        CUIElement::Render
        CUIElement::RenderWithTransform
        CUIElement::RenderVisual
        CUIElement::RenderChildren
            {Repeat of the above in a recursive fashion}
所以在这个“Render”方法中,它在某处分配了大约520字节的内存,据我所知,它并没有释放内存

我还可以看到一个名为

SDBitmapCreate
内存也在泄漏

有趣的是,我似乎发现了一些东西,但我不确定是什么

还有其他建议吗


谢谢。

首先,我不知道有任何silverlight内存泄漏工具

几周前,我遇到了内存泄漏问题。事实证明,我的Silverlight应用程序在画布上有流氓子对象

我的问题可能不是你的问题,但它可能会让你思考

在用服务器的结果重新填充列表之前,我必须从相应的画布中删除所有子项。仅仅清除列表是不够的

        for (int i = 0; i < boxDataLabel.Count; i++)
        {
            canvaz.Children.Remove((Label)boxDataLabel[i]);
        }
        boxDataLabel.Clear();
for(int i=0;i
boxDataLabel是类型标签的列表


祝你好运。

这里有一个关于Silverlight内存泄漏故障排除的好教程:。这很复杂,您必须处理WinDBG命令,但我发现它在过去很有用。当然,这并没有明确回答您的问题,但它可能会为您指明正确的方向。

关于Xaml中的内联数据模板,存在官方内存泄漏。您可以在此处阅读有关它的帖子:

Microsoft发布了一个服务版本(更新版本为4.0.50826.0),该版本应能解决以下问题:


如果服务版本修复了(某些)您的问题,请记住更新主机html文件中的最低版本。

如果我是您的情况,我会尝试创建一个简单的测试应用程序来演示泄漏,只是为了再次检查它是否可在实际代码之外重复。这证明了它不是代码中的一个细微缺陷。然后,我会将测试应用程序发布到MS Silverlight论坛,该论坛由MS Peops监控。如果您订阅了MSDN,或者您的公司与MS签订了支持协议,我也会向MS开出一张“罚单”(忘记他们实际的称呼)。

那么,这为什么会造成内存泄漏呢?一定有什么东西保持着打开的内存,你知道具体是什么吗?你是如何使用ANT来检测内存泄漏的?我所知道的(或通过谷歌找到的)唯一的“ANT”是Java构建工具()。这就是你所指的,还是有一些Silverlight ANT工具我不知道(显然需要知道)?没关系,最终发现了:是的,就是那个。您可以按名称空间进行过滤,通常在内存泄漏的情况下,您希望在自己的名称空间中看到正在泄漏的类。这里不是这样,silverlight框架中的东西正在泄漏。我确信是我们造成的,但这只会让我们更难发现,也更难得出原因。你可以使用Delaker进行搜索内存泄漏……9月份发布的版本修复了一些问题,但不是所有问题。Silverlight团队目前正在测试一个有望很快发布的修复程序。