ソース管理リポジトリからの変更の履歴ログを表示するアプリを構築しています。このアプリは、.NET 4 WPF および Entity Framework Code First で実装されています。
私が直面している問題の 1 つは、時間の経過とともに、より多くのログ エントリがログに追加されるにつれて、アプリケーションがより多くのメモリを使用し、ログ エントリへの参照を解放しないことです。各ログ エントリには、「変更されたファイル」のリストと、変更されたファイルごとに、ファイルの前後のバージョンが保持されます。
LogEntry
UI には、ログ エントリのリストと、現在選択されているとの古いバージョンと新しいバージョンの差分が表示されます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 でこれを行う方法はありますか? それとも、使用するメモリを制御するために別のアプローチをとるべきですか?
アプリと完全なソース コードは、 https ://github.com/tomhunter-gh/SourceLog の GitHub でホストされています。