【发布时间】:2012-10-27 22:40:03
【问题描述】:
我正在构建一个应用程序来显示来自源代码控制存储库的更改历史日志。该应用在 .NET 4 WPF 和 Entity Framework Code First 中实现。
我遇到的一个问题是,随着时间的推移,随着更多日志条目被添加到日志中,应用程序会使用越来越多的内存并且不会释放对日志条目的引用。每个日志条目都包含一个“已更改文件”列表,并且对于每个已更改文件,文件的前后版本。
UI 显示日志条目列表以及当前选定的LogEntry 和ChangedFile 的新旧版本之间的差异。数据模型大致如下:
public class LogSubscription
{
public List<LogEntry> Log { get; set; }
}
public class LogEntry
{
public List<ChangedFile> ChangedFiles { get; set; }
}
public class ChangedFile
{
public string OldVersion { get; set; }
public string NewVersion { get; set; }
}
由于我使用的是 EF Code First,因此只需访问 List 属性即可查询数据库并自动构建对象模型。我想做的是在一段时间后以某种方式取消引用ChangedFiles 列表,并根据需要重新查询数据库并重建对象模型(即用户已单击返回日志条目)。
EF Code First 有什么方法可以做到这一点?或者我应该采取不同的方法来控制所使用的内存?
应用程序和完整源代码托管在 GitHub 上:https://github.com/tomhunter-gh/SourceLog
【问题讨论】:
-
如果您为应用程序使用单个上下文实例,它将保存对已加载实体的所有引用,直到您手动分离它们或释放上下文实例。
-
谢谢@LadislavMrnka。基本上是在处理上下文时不能使用延迟加载的情况吗?我认为这是我感到困惑的地方,也是我之前遇到问题的地方..
标签: c# wpf memory-management entity-framework-4.1 ef-code-first