我在寫一個應用程序,它在文件中每20毫秒記錄一次。由於日誌記錄經常發生,我檢查了該程序的CPU使用情況,並且它相當高。爲了減少這一點,我想緩衝數據,一旦達到一定的大小,然後將數據記錄到文件。這反過來又減少了我必須做的讀寫數量。然而,這是否是一種最佳方法?BufferedWriter日誌寫入使用了大量的CPU
前:
public void log(String log) {
BufferedWriter bw = new BufferedWriter(new FileWriter("log.txt", true));
bw.write(log);
bw.flush();
bw.close();
}
後:
byte[] outputbArr = log.getBytes();
for (int i = 0; i < outputbArr.length; i++) {
this.buf[this.bufSize] = outputbArr[i];
this.bufSize++;
if (this.bufSize == BUFLENGTH) {
writeLog();
this.buf = new byte[BUFLENGTH];
this.bufSize = 0;
}
}
private void writeLog() {
FileOutputStream fos = new FileOutputStream("log.txt");
fos.write(this.buf);
fos.close();
}
有沒有更好的方法嗎?我如何減少寫入次數。對於這種情況,通常採用何種方法?
你可以完全拋棄BufferedWriter。你應該看看日誌工具。流行的包括Java自己的java.util.logging庫,log4j,log4j2甚至更好的slf4j。 – Ishnark
使用現代日誌記錄框架 - 查看批處理log4j2的異步日誌記錄:https://logging.apache.org/log4j/2.x/manual/async.html – diginoise