2011-05-28 83 views
2

我通常使用兩種方法寫入文件,無論是Qt的QFile還是STL的fstream。我應該讓QFile(或fstream)打開嗎?

我有一個長期運行(幾分鐘)模擬將數據記錄到文件。性能方面和設計方面,它是一個好主意:

  1. 保持打開狀態的整個時間
  2. 關閉和開放的每一個寫
  3. 介於兩者之間(1)和(2)

在這裏有幾個問題,解決這個問題(爲Perl,爲fopen),但我沒有看到一個QFile和fstream的任何討論。以前的答案建議保持開放(選項1)。這仍然是QFile和fstream的演員嗎?

回答

3

在性能方面,它肯定會是更好地保持打開的應用程序的生命,只是因爲工作少打開和關閉文件意味着花更少的時間做的事情,不要移動應用程序接近完成,這將減慢程序。至於設計,只要確保在應用程序終止前關閉文件。

一個QFile和fstream的可能的fopen,FWRITE等使用引擎蓋下(雖然這當然是實施相關的)。所以我敢打賭,任何適用於FILE*的東西都適用於QFiles和fstreams。

1

這可能取決於您的libc實現,但fstream通常使用內存映射文件。這些通常非常有效,並且只有主存儲器或在寫入一頁數據時進行交換。

如果您運行的是32位系統,並且這些文件非常大或非常多,那麼你可以有排氣(在Windows〜2GB可能導致這樣的問題)的虛擬地址空間的問題。看到你只是簡單地記錄這一點似乎不太可能。

但是,簡單地關閉這些文件可能會使情況變得更糟,因爲那樣虛擬地址空間就會變得碎片化。

我會建議,這是最好的,除非你認爲你會碰到的問題上面留在任何時候都打開的文件。如果您受到內存限制,則刷新數據將減少物理內存要求。

+0

你從哪裏得到這些信息?我覺得你有點困惑。 – 2011-05-28 22:03:59

+0

這裏有什麼特別的問題嗎? – eyesathousand 2011-05-28 22:07:37