2013-07-18 54 views
0

我有代碼,其中運行大量循環更新單個字符串。 最後我希望該字符串被存儲在一個文件中。將字符串寫入文件的最高性能方法是什麼?

目前我正在將該字符串打印到控制檯。 我可以使用ofstream並將其寫入文件而不是控制檯。

  • 而不是使用一個字符串進行更新,使用直接文件流
  • 使用字符串流,而不是最後複製串流文件 流和寫入文件。
  • 字符串更新完成後,我應該一次寫入文件流 。

在我的編譯器std::string::max_size是:4294967257 而字符串,我可以產生的最大尺寸大約是編譯器的max_size的一半。

注意:我正在使用Solaris Unix。

將此字符串寫入文件的最高性能方法是什麼?

+0

這將取決於你的環境;操作系統,可用內存,字符串的大小,你的代碼如何更新字符串... 如果字符串的大小比內存小得多,我認爲1或2是最好的。 – kamae

+0

字符串有多大,你需要多長時間寫一次? –

+0

如果性能是你最關心的,直接使用C文件IO是最佳選擇。 – oldmonk

回答

2

只有一種方法可以知道答案。你必須爲你的情況進行分析。您可以通過測量計時生成文件所需的時間來輕鬆完成此操作。

+0

我測試了簡單的循環和流。發現對我而言,1或3是可行的。但第二個真的是****。不知道爲什麼 – Vijay

0

考慮所有場景和基準時間。

注:最快的將是最接近內存的那個。

0

嘗試儘可能重複使用相同的std :: string對象,使用保留和清除。該字符串將緩存其內存分配。每次輸入塊時,{}內的字符串都會重新分配一次。

要小心隱藏的臨時字符串對象,例如,a + b當std :: string將創建一個具有新分配的臨時std :: string對象。首選+ =連接字符串。

使用C代碼執行轉換。創建一個本地char緩衝區並使用sprintf等。它們比stringstream更快,但犯錯誤更容易,所以要小心。

寫入文件時使用「\ n」而不是std :: endl,因爲後者會導致刷新。

避免像瘟疫一樣的字串流。他們很慢,至少Visual Studio的實現。我已經嘗試過他們的核心文本處理,我知道。

當然這假設性能是您的問題。如果你在做輕鬆的工作,stringstreams可能是最簡單的解決方案。當我沒有做核心工作時,我更喜歡他們,因爲錯誤的可能性要小得多。

相關問題