我有一个 WPF 应用程序,它在内存不足后停止运行......
它基本上是一个显示节点的 TreeView,它们是 Linq To Sql 或生成的类 ICTemplates.Segment 的实例。在 OR 设计器中,大约有 20 个表通过关联间接链接到该类。
<TreeView Grid.Column="0" x:Name="tvwSegments"
ItemsSource="{Binding}"
SelectedItemChanged="OnNewSegmentSelected"/>
<HierarchicalDataTemplate DataType="{x:Type local:Segment}" ItemsSource="{Binding Path=Children}">
...
// code behind, set the data context based on user-input (Site, Id)
KeeperOfControls.DataContext = from segment in tblSegments
where segment.site == iTemplateSite && segment.id == iTemplateSid
select segment;
我在段类中添加了一个名为 Children 的显式属性,该类使用父子记录查找另一个表。
public IEnumerable<Segment> Children
{
get
{
System1ConfigDataContext dc = new System1ConfigDataContext();
return from link in this.ChildLinks
join segment in dc.Segments on new { Site = link.ChildSite, ID = link.ChildSID } equals new { Site = segment.site, ID = segment.id }
select segment;
}
}
其余部分是数据绑定和数据模板,以将每个 Segment 显示为一组 UI 控件。
我很确定孩子正在按响应时间按需加载(当我扩展父级时)。当我扩展一个包含大约70个子节点的节点时,加载子节点需要一段时间(任务管理器显示 Mem Usage 为 1000000K!)。如果我用大约 50 个子节点扩展下一个节点,BOOM!内存不足异常
我运行 VS Profiler 进行更深入的挖掘,结果如下
前 3 名是 Action、DeferredSourceFactory.DeferredSource 和 EntitySet(所有 .Net/LINQ 类)。唯一的用户类是 Segment[] 和 Segment 在 #9 和 #10。
我想不出要追求的线索.. 可能是什么原因?