C# 远程事件日志分页

C# 远程事件日志分页,c#,asp.net,linq,event-viewer,C#,Asp.net,Linq,Event Viewer,我有以下要求 读取远程计算机事件日志 传递凭证 允许用户在MVC应用程序中逐页浏览此内容 根据我的研究,我相信这可以通过结合& 虽然我已经成功地使用凭据连接到远程计算机并读取日志文件,但我仍然坚持使用分页功能。我不知道如何使用EventLogQuery实现LINQ的Skip&Take方法 这些机器中的一些将有超过20000个日志,我希望避免在分页之前将它们全部加载到内存中 有没有一种方法可以通过EventLogQuery实现分页?这里介绍了如何使用的延迟求值功能来实现这一点。给定要使用Eve

我有以下要求

  • 读取远程计算机事件日志
  • 传递凭证
  • 允许用户在MVC应用程序中逐页浏览此内容
根据我的研究,我相信这可以通过结合&

虽然我已经成功地使用凭据连接到远程计算机并读取日志文件,但我仍然坚持使用分页功能。我不知道如何使用EventLogQuery实现LINQ的Skip&Take方法

这些机器中的一些将有超过20000个日志,我希望避免在分页之前将它们全部加载到内存中


有没有一种方法可以通过EventLogQuery实现分页?

这里介绍了如何使用
的延迟求值功能来实现这一点。给定要使用
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;
        }
    }
}
这就是说,在MVC应用程序中不会对远程PC进行分页—在屏幕分页之间保留迭代器的状态是不可取的。最好是从远程机器预取查询中感兴趣的所有事件,并将其保存到中央数据库(即类似于企业软件,如)。然后,您可以使用类似于EF的ORM在空闲时浏览事件数据

var result = QueryEventRecords("*[System[(Level = 3)]]")
    .Skip(10)
    .Take(10)
    .ToList();