以下情況: 我正在編輯一個龐大的程序中的單個方法,該程序經常被調用,但我不知道每次運行的頻率如何(每次運行都不相同)。改善fopen/fclose場景中的性能
現在,我必須將日誌記錄添加到txt文件,每次調用時打開/關閉文件對整個應用程序來說都是一個巨大的瓶頸。
只是將文件打開並不是一個真正的選項,因爲我不知道它是否是最後一次調用此函數。
有沒有辦法在不修改調用網站的情況下加快速度?
我寧願避免更改方法簽名,因爲當我們將工作與我的同事結合使用時(這裏沒有工作版本控制),會導致問題
以下情況: 我正在編輯一個龐大的程序中的單個方法,該程序經常被調用,但我不知道每次運行的頻率如何(每次運行都不相同)。改善fopen/fclose場景中的性能
現在,我必須將日誌記錄添加到txt文件,每次調用時打開/關閉文件對整個應用程序來說都是一個巨大的瓶頸。
只是將文件打開並不是一個真正的選項,因爲我不知道它是否是最後一次調用此函數。
有沒有辦法在不修改調用網站的情況下加快速度?
我寧願避免更改方法簽名,因爲當我們將工作與我的同事結合使用時(這裏沒有工作版本控制),會導致問題
使文件保持打開狀態。當程序調用exit
或從main
返回時,所有文件都將關閉(其中包括刷新所有待處理的緩衝區)。沒有理由關心對日誌功能的調用是否是「最後一次調用」。
除了R ..的answer之外,您還可以捕獲中斷或終止信號並自行關閉文件。
因此,不要在每次通話時打開和關閉文件。當程序正常結束時,文件將被刷新並關閉。你可能應該在每次調用日誌之後使用'fflush()'(儘管這有一些開銷)。但不要打開/關閉每個電話 - 這太慢了。考慮追加模式 - 這可能是一個好主意。您不需要將界面更改爲功能;您只需在文件範圍內創建一個'static FILE * stdlog = 0;'變量,並且在記錄時指針爲空,則打開該文件。之後,使用'stdlog'作爲日誌文件流。如果您不想冒'stdlog'的風險,請嘗試'log_fp'。 –
使用緩衝區進行日誌記錄,一旦日誌緩衝區已滿,將其寫入文件。 –
而在20世紀,沒有工作版本控制是一個愚蠢的錯誤(進攻)。在21世紀,這是荒謬的不專業。 –