0

我正在开发一个日志解析服务,用于捕获 Windows 事件日志中的特定安全事件。我最初的想法是使用 Microsoft 的LogParser,但除了选择预先已知的特定实例/事件 ID 之外,我并没有寻找任何功能。

经过一些基准测试后,我发现迭代整个 .NETEventLog.Entries集合在提取数据方面比查询 Microsoft 的 LogParser 快 3 倍多。

最终,要提取的数据将保存在 SQL Server 数据库中。由于该服务每天都会执行此任务,因此我希望避免重复条目,并且我需要一种方法来查找EventLog.Entries集合中尚未在数据库中的下一个条目。一旦找到初始条目,我就可以开始插入数据库。

我正要编写一个二分搜索,以使用DATETIME数据库中最新的时间戳字段来查找此条目,并将其与集合TimeWritten中某个项目的属性进行比较。EventLog.Entries我可以这样做,但我想知道是否已经有内置方法来执行此搜索?

4

2 回答 2

1

我最终写了自己的,因为我找不到内置的实现:

/// <summary>
/// Performs a binary search on a specified EventLogEntryCollection's
/// TimeWritten property
/// </summary>
/// <param name="entries">The collection to search</param>
/// <param name="value">The timestamp value being searched</param>
/// <param name="low">The lower-bound search index</param>
/// <param name="high">The upper-bound search index</param>
/// <returns>The index of a matching timestamp, or -1 if not found</returns>
private int BinarySearch(EventLogEntryCollection entries, DateTime value, int low, int high)
{
    if (high < low)
        return -1;
    int mid = low + ((high - low) / 2);
    if (entries[mid].TimeWritten > value)
        return BinarySearch(entries, value, low, mid - 1);
    else if (entries[mid].TimeWritten < value)
        return BinarySearch(entries, value, mid + 1, high);
    else
        return mid;
}
于 2009-04-14T14:48:28.950 回答
0

我不知道EventLogEntryCollection,但如果你需要一个通用的二分搜索算法,你可以使用在PowerCollections库中实现的那个。

于 2009-04-14T06:00:48.967 回答