Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何隔离Silverlight内存泄漏_Silverlight_Silverlight 4.0_Memory Leaks_Telerik - Fatal编程技术网

如何隔离Silverlight内存泄漏

如何隔离Silverlight内存泄漏,silverlight,silverlight-4.0,memory-leaks,telerik,Silverlight,Silverlight 4.0,Memory Leaks,Telerik,我在silverlight应用程序中出现内存泄漏,我使用此信息开始 太棒了。我提取了一些代码来解决这个问题。代码看起来像这样,一个子窗口 <controls:ChildWindow x:Class="MemoryLeakTesting2.ConfirmDialog" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microso

我在silverlight应用程序中出现内存泄漏,我使用此信息开始

太棒了。我提取了一些代码来解决这个问题。代码看起来像这样,一个子窗口

<controls:ChildWindow x:Class="MemoryLeakTesting2.ConfirmDialog"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
       xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
       xmlns:telerik="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls"        
       Width="375"   >
    <Grid Margin="2">
        <telerik:RadButton Content="OK" Click="OnClick" Command="{Binding CancelActionCommand}" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,0,0" Grid.Row="1" />
    </Grid>
</controls:ChildWindow>
我从silverlight主页的按钮点击事件调用此代码,如下所示

private void Button_Click(object sender, RoutedEventArgs e)
{
    ConfirmDialog dialog = new ConfirmDialog();
    dialog.Show();
}

每次我打开并关闭弹出窗口时,都会泄漏内存。我使用WinDbg,它实际上表明ConfirmDialog实例在每次弹出并关闭后都不会被释放???

按钮。命令因泄漏而臭名昭著。我猜想值
CancelActionCommand
引用了一个长寿命对象。
按钮
不会从
ICommand.CanExecuteChanged事件中解除挂钩。你应该考虑使用A来限制你的可泄漏表面积。< /P>
可能是:


每次单击事件时,您都会创建
ConfirmDialog
对象,该对象在不再使用后可能会挂起。您能否将其创建为一个类变量,并且只有一个引用,并在需要显示
子窗口时使用该引用,您可能对我们的整个应用程序是正确的,但对于上面的这个特定代码片段,我只是从我们的应用程序复制并粘贴了一些代码。那里的实际命令没有绑定到任何东西。没有视图模型。值得一试。。。在Styles.xaml或其他ResourceDictionary中是否存在隐式应用于窗口或按钮的内容?这很有趣。我所做的只是创建一个空白的silverlight 4解决方案。在上面的子窗口中复制我们的主产品,删除子窗口中的一些其他内容,就是这样。没有款式什么的,很好。这是一个真正的信心建立者。对于微软来说,这可能是一个更好的问题。他们不断制造这样无用的垃圾,破坏网络。你不能在Flash或HTML5或两者中构建你的应用程序吗?你如何确定内存正在泄漏?你真的能看到内存消耗在增加吗?(哪里?)我已经更新了问题。ConfirmDialog没有在每次创建和关闭时被释放。为什么它会挂起?也许你是对的,但只是进一步探讨一下这个想法。我走过去,用这种或那种方法量量,怎么样。查看此空间。扫描线程5 OSTHread 11c4扫描线程34 OSTHread 12f8扫描线程35 OSTHread 108c域(07581358):句柄(固定):81d12f8:Root:0ce74260(System.Object[])->0be86958(System.Collections.Generic.List`1[[System.Object,mscorlib]])->0befcbcbc4(System.Object[])->0bf17df4(MemoryLeakTesting2.ConfirmDialog)对不起,看起来很糟糕,但是赏金马上就要结束了。我认为你是对的,它被打开了,上面是一个什么是保持它打开堆栈跟踪。我不明白是什么让它保持打开状态?@peter:请看ChildWindow内存泄漏()-出于某种原因,我以为SL4可以解决这个问题,但可能不会……如果我遇到一些有趣的事情,我会更新这个。
private void Button_Click(object sender, RoutedEventArgs e)
{
    ConfirmDialog dialog = new ConfirmDialog();
    dialog.Show();
}