我有一个我自己没有创建的WPF表单,所以我对WPF不太擅长。尽管如此,它的泄漏严重,高达400 MB,关闭表单并没有帮助。WPF内存泄漏
问题出在我的应用程序加载所有的图片一次。我只想加载目前可见的。它大约有300张图片,并且它们有点大,所以我的WPF表单遭受全部加载。
我有一个DataTemplate
与我自己的类型有一个属性Thumbnail
。在模板中的代码是这样的:
<Image Source="{Binding Path=Thumbnail}" Stretch="Fill"/>
然后我有一个具有上述模板作为源的控件的网格。这个控件的代码如下。请提供一些关于如何优化代码的提示,也许只有那些可见的并且只能同时加载多个控件的提示。
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Controls:ElementFlow">
<Grid Background="{TemplateBinding Background}">
<Canvas x:Name="PART_HiddenPanel"
IsItemsHost="True"
Visibility="Hidden" />
<Viewport3D x:Name="PART_Viewport">
<!-- Camera -->
<Viewport3D.Camera>
<PerspectiveCamera FieldOfView="60"
Position="0,1,4"
LookDirection="0,-1,-4"
UpDirection="0,1,0" />
</Viewport3D.Camera>
<ContainerUIElement3D x:Name="PART_ModelContainer" />
<ModelVisual3D>
<ModelVisual3D.Content>
<AmbientLight Color="White" />
</ModelVisual3D.Content>
</ModelVisual3D>
<Viewport2DVisual3D
RenderOptions.CachingHint="Cache"
RenderOptions.CacheInvalidationThresholdMaximum="2"
RenderOptions.CacheInvalidationThresholdMinimum="0.5"/>
</Viewport3D>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
谢谢。我检查并验证Thumbnail属性的检索次数与列表中的项目一样多。是的,这是我使用的控制:)。听起来像他发现了同样的事情。实施虚拟化有多困难..? :) – 2010-05-18 21:52:13