我有一个带有事件日志的 WPF 应用程序。我有一个 EventLog 类,当应用程序启动时,我使用 XML 文件中保存的事件填充
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;
}
然后,我将其转换为 listview 绑定到的可观察集合
List<EventLog> _evtLog = new List<EventLog>();
ObservableCollection<EventLog> _eventLog = new ObservableCollection<EventLog>();
_evtLog = logger.GetSavedEvents();
_evtLog.ForEach(x => _eventLog.Add(x));
我读到这就是它必须完成的方式(尽管这似乎是一个冗长的方式)
当应用程序运行时,新事件被添加到 observable 集合中。当应用程序关闭时,我会反转此过程以保存事件。
虽然如果随着列表越来越大而只有少数已保存的事件,这可以正常工作,但执行此操作所需的时间变得不切实际(240K 事件需要 7 秒)。好的,您可能会问的第一个问题是,为什么我仍然想要这么多活动,事实是我不想要,但它确实强调了我不是以最好的方式做到这一点?
所以我的问题是:
我真的需要填充可观察的集合吗?我不能在_evtLog
不填充另一个的情况下制作 Observable 吗?
我可以根据事件的日期将这些列表限制为 X 事件吗?