我有一个简单的WPF应用程序,包括一个带有橙色矩形和连续动画的窗口,该动画更改应用于矩形的模糊半径。目前,该应用程序正在两台计算机上进行灌注测试,以诊断与WPF相关的内存泄漏问题,该问题在较大程序中存在。
在第一台计算机上,内存使用量保持稳定,平均值略微振荡,频率与动画持续时间相同。测试程序已经可靠地运行了一个多星期而没有泄漏内存。该计算机运行windows 7 32位操作系统。
在第二台计算机上,内存使用情况也显示出相同的周期性行为,然而,每90秒左右,内存使用情况会增加约100kb。只要应用程序在运行,这种额外的增加就永远不会被回收。我曾经运行过这个程序,直到整个系统内存都被这个应用程序消耗完!一个矩形上的动态光芒消耗了4GB的内存!该计算机运行windows 7嵌入式32位操作系统。
两个平台之间存在显著的硬件差异,但两个系统都运行其各自硬件的最新驱动程序。
相同的编译后的exe文件在两台计算机上运行,没有附加调试器。应用程序的XAML代码如下:
在第一台计算机上,内存使用量保持稳定,平均值略微振荡,频率与动画持续时间相同。测试程序已经可靠地运行了一个多星期而没有泄漏内存。该计算机运行windows 7 32位操作系统。
在第二台计算机上,内存使用情况也显示出相同的周期性行为,然而,每90秒左右,内存使用情况会增加约100kb。只要应用程序在运行,这种额外的增加就永远不会被回收。我曾经运行过这个程序,直到整个系统内存都被这个应用程序消耗完!一个矩形上的动态光芒消耗了4GB的内存!该计算机运行windows 7嵌入式32位操作系统。
两个平台之间存在显著的硬件差异,但两个系统都运行其各自硬件的最新驱动程序。
相同的编译后的exe文件在两台计算机上运行,没有附加调试器。应用程序的XAML代码如下:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="WpfAnimation.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">
<Window.Resources>
<Storyboard x:Key="Flash" AutoReverse="True" RepeatBehavior="Forever" FillBehavior="Stop">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Effect).(BlurEffect.Radius)" Storyboard.TargetName="rectangle">
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="15">
<EasingDoubleKeyFrame.EasingFunction>
<ElasticEase EasingMode="EaseOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>
<Window.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard Storyboard="{StaticResource Flash}"/>
</EventTrigger>
</Window.Triggers>
<Grid x:Name="LayoutRoot">
<Rectangle x:Name="rectangle" Fill="#FFFFA400" Margin="113,93,125,101" Stroke="Red" RadiusX="10" RadiusY="10" StrokeThickness="5">
<Rectangle.Effect>
<BlurEffect KernelType="Box" Radius="0"/>
</Rectangle.Effect>
</Rectangle>
</Grid>
</Window>
这段代码是基于 .net Framework 4.0 构建的。这个 XAML 没有 C# 代码。
有没有可能解释一下为什么一个这么简单的程序会出现内存泄漏的问题?