イベントログ付きのWPFアプリがあります。アプリの起動時にXMLファイルから保存されたイベントを入力するEventLogクラスがあります
namespace MyApp.Agent.EventLogging
{
public enum EventType
{
Infomation,
Error
}
public class EventLog
{
public String Image { get; set; }
public DateTime EventDate { get; set; }
public String EventText { get; set; }
}
}
public List<EventLog> GetSavedEvents()
{
string file = XmlUtilities.GetXmlLocation() + "\\Events.xml";
List<EventLog> elog = new List<EventLog>();
try
{
if (File.Exists(file))
{
Serialize<List<EventLog>> ser = new Serialize<List<EventLog>>();
elog = ser.DeserializeDocToObj(file);
}
}
catch
{
throw new InvalidEventLogException(ConfigurationManager.AppSettings.Get("EventLogFileInvalid"));
}
return elog;
}
次に、これをリストビューがバインドされている監視可能なコレクションに変換します
List<EventLog> _evtLog = new List<EventLog>();
ObservableCollection<EventLog> _eventLog = new ObservableCollection<EventLog>();
_evtLog = logger.GetSavedEvents();
_evtLog.ForEach(x => _eventLog.Add(x));
私はこれがそれが行われなければならない方法であることを読みました(それは長い道のりのように見えますが)
アプリの実行中に、新しいイベントが監視可能なコレクションに追加されます。アプリが閉じたら、このプロセスを逆にしてイベントを保存します。
リストが大きくなるにつれて保存されたイベントが少ない場合、これは正常に機能しますが、これを行うのにかかる時間は非現実的です(240Kイベントには7秒かかります)。さて、あなたが尋ねるかもしれない最初の質問は、なぜ私はとにかくそんなに多くのイベントが欲しいのかということです、真実は私がそうしないということです、しかしそれは私がこれを最善の方法でやっていないことを強調しますか?
だから私の質問は:
本当に監視可能なコレクションにデータを入力する必要がありますか?_evtLog
どちらか一方にデータを入力せずにObservableを作成することはできませんか?
イベントの日付に基づいて、これらのリストをXイベントに制限できますか?