【问题标题】:Can I throttle a FileSystemWatcher, or is Timer a better option?我可以限制 FileSystemWatcher,还是 Timer 是更好的选择?
【发布时间】:2012-02-08 17:08:40
【问题描述】:

我想从日志文件中解析数据,将其泵入数据库,然后清除日志文件。

我可以使用 FileSystemWatcher 组件并监视 Change 事件,但该事件会不停地触发,因为日志文件几乎“不断地”被写入。我不想随意打开/关闭数据库连接。

我目前的直觉是使用计时器,然后每隔一段时间(基于时间或基于时间和文件大小)解析/泵送/清除日志文件。

是否有处理场景的通用/经过验证的方法(设计模式)?

更新:我看到 FileSystemWatcher 有一个 NotifyFilter 属性,其中一个可过滤对象是“Size”;我猜(还没有找到任何验证)只要文件大小改变 1KB,它就会触发;如果属实,这将是一个合理的“节流”……

【问题讨论】:

    标签: c# logging file-io


    【解决方案1】:

    不确定这是否是一种设计模式,但如果您在实际写入日志文件之前控制缓冲量,则可以将频率降至最低。

    【讨论】:

    • 我不想影响正在写入日志文件的应用程序;他们不需要知道/担心这种解析/泵送/清除。
    • 要求,要求...当我们知道它们是什么时,总是会更容易!无论如何,我相信你有一个更困难的问题是控制对日志文件的访问。如果应用程序正在写入它,您如何清除它?
    【解决方案2】:

    change 事件在这里太啰嗦了。我会使用计时器定期检查文件,查看修改时间戳(并可能创建,特别是如果有人删除/重新创建文件。)

    【讨论】:

      【解决方案3】:

      您对日志文件的生成有任何控制权吗?如果是这样,您可以做的是创建一个新的日志文件,说每次它达到一定的日志大小并将旧日志文件重命名为特定格式。然后让文件系统观察程序过滤“归档”日志文件并在创建它们时对其进行处理。

      【讨论】:

      • 查看我的其他评论(我不想将此应用与其他应用耦合)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-16
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 2018-02-26
      • 2016-06-19
      • 1970-01-01
      相关资源
      最近更新 更多