下面是如何使用yield return
的懒惰评估功能来解决这个问题的想法。给定一个查询中使用EventLogQuery
来执行,你可以做如下:
public IEnumerable<EventRecord> QueryEventRecords(string queryString)
{
var query = new EventLogQuery("Application", PathType.LogName, queryString);
using (var reader = new EventLogReader(query))
{
EventRecord eventRecord;
while ((eventRecord = reader.ReadEvent()) != null)
{
yield return eventRecord;
}
}
}
然后你就可以执行查询,然后使用自己喜欢的LINQ运营商在IEnumerable
。
var result = QueryEventRecords("*[System[(Level = 3)]]")
.Skip(10)
.Take(10)
.ToList();
也就是说,寻呼远程PC不会在MVC应用程序飞 - 护屏分页之间的迭代器的有状态不会是可取的。最好是从远程计算机中预先获取感兴趣的查询中的所有事件,并将其保存到中央数据库(即类似于企业软件,如SCOM)。然后,您可以使用EF等ORM在闲暇时浏览事件数据。