【问题标题】:Java FileWriter: Repeated File Open/Close(Multiple Instance) vs Single Open/Close(Single Instance) on Client-Server EnvironmentJava FileWriter:客户端-服务器环境上的重复文件打开/关闭(多实例)与单次打开/关闭(单实例)
【发布时间】:2011-01-18 01:51:48
【问题描述】:

我们目前有一个客户端-服务器系统。我们有这个应用程序,它将通过将日志写入客户端 PC 上的文本文件来监控我们系统上每个事务的性能(请求/处理/sql 查询的开始结束时间等)。

我们当前的实现是针对每个请求,我们将打开日志文件,写入事务的详细信息,然后为我们发出的每个请求关闭文件。每个客户端还有一个单独的 FileWriter 实例。

我们想知道在应用程序的整个使用过程中打开文本文件是否更好,然后在注销时使用 FileWriter 的单个实例将其关闭。

  1. 仅使用 FileWriter 的单个实例有什么影响?
  2. 当我们将 Filewriter 从多实例更改为单实例时,速度会发生显着变化吗?

【问题讨论】:

  • 您是否考虑过只使用记录器(Java 系统记录器或类似 log4j 的东西)?这将解决您所有的同步问题,为您提供更多的可配置性,并且性能非常好。

标签: java file-io client-server


【解决方案1】:

如果您进行大量编写工作,您可能会看到文件的单次打开关闭会提高性能。但是,我认为任何收益都不值得付出努力,因为与您正在执行的其他操作(尤其是 sql 查询)相比,这听起来像是杯水车薪。

【讨论】:

    【解决方案2】:

    您的平台可能会强制您对同一文件仅使用一个FileWriter。保持把手打开。 您至少应该使用在内部处理线程同步的PrintWriter。 性能方面,您可以使用(或不使用)FileDescriptor.sync(). 以安全换取性能 您可以使用FileDescriptor 创建FileWriter,您可以从FileOutputStream 获得。

    我赞同只使用 log4j 或 Java 自己的日志记录机制的想法。

    【讨论】:

      猜你喜欢
      • 2015-09-07
      • 1970-01-01
      • 2017-08-31
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 2011-04-26
      • 2021-06-08
      相关资源
      最近更新 更多