2010-07-14 59 views
0

我的應用程序會連續計算字符串並將它們輸出到文件中。這是幾乎整整一天運行。但寫入文件會減慢我的應用程序。有沒有一種方法可以提高速度?另外我想擴展應用程序,以便在某段時間後可以將結果發送到另一個系統。需要一些幫助將結果寫入文件

感謝&問候,

像老鼠

+4

向我們展示填充文件的代碼。另一方面,你確定IO是瓶頸嗎? – mbq 2010-07-14 09:12:02

+3

如果你換行4211和4212,並且在行340857中將'foo'改成'bar',我預測你的應用程序會快很多。 – sbi 2010-07-14 09:21:40

回答

3

有幾件事情,可能會或可能不會幫助你,根據你的情況:

  1. 考慮使用異步I/O,例如通過使用Boost.Asio。這樣您的應用程序就不必等待昂貴的I/O操作才能完成。但是,您必須將生成的數據緩衝在內存中,因此請確保有足夠的可用空間。
  2. 考慮將字符串緩存到一定大小,然後大批量寫入磁盤(或網絡)。幾乎沒有大的寫作通常比許多小寫作要快。
  3. 如果你想使它真的很好C++,意思是STL -comliant,使你的算法模板功能,並採取output-iterator作爲參數。通過這種方式,您可以通過提供適當的迭代器輕鬆地將它寫入文件,網絡,內存或控制檯。
1

如何,如果你寫結果到插座,而不是文件。另一個程序Y將讀取套接字,打開一個文件,在其上寫入並關閉它,並在指定的時間後將結果傳輸到另一個系統。
我的意思是文件處理的過程由其他程序處理。原始程序X只是將輸出發送到套接字。它不關心它自己刷新文件流。

我也想擴展應用 ,這樣我可以經過一些特定 的時間將結果發送到一個 另一個系統。

如果你只是想將文件傳輸到其他系統,那麼我認爲一個簡單的腳本就足夠了。

1

使用多個文件進行日誌記錄。例如,在文件達到1 MB大小後,將其名稱更改爲包含日期和時間的名稱,然後開始寫入新文件,並將其命名爲原始文件名。 那麼你必須:

RESULTS.TXT

results2010-1-2-1-12-30.txt(1時12分三十秒2010年1月2日)

等。

+0

它如何加快程序?這是否意味着寫入大於1MB大小的文件的過程緩慢,並且隨着大小的增加而變得越來越慢?請解釋一下。謝謝 – 2010-07-14 09:38:14

0

您可以在內存中緩衝不同計算的結果,並且只在緩衝區滿時寫入文件。例如,您可以通過計算100次計算的結果並將所有100個結果立即寫入文件中來設計應用程序。然後計算另一個100等等。

0

寫入文件顯然很慢,但是您可以緩存數據並啓動單獨的線程以便在文件上進行扭曲。這可以提高您的應用程序的速度。

其次,您可以使用ftp將文件傳輸到其他系統。

0

我認爲這裏有一些紅鯡魚。

在較舊的計算機系統上,我建議高速緩存字符串並進行少量的大寫操作,而不是大量的小寫操作。在現代系統上,默認的磁盤緩存綽綽有餘,做額外的緩衝不太可能有所幫助。

我認爲你不是禁用緩存或打開每個寫入文件。

它是可能寫入非常大的文件時出現了一些問題,但那不會是我的第一個猜測。

完成後輸出文件有多大?

是什麼原因導致您認爲該文件是瓶頸?你有分析數據?

是否有可能存在內存泄漏?

您可以發佈的任何代碼或統計資料將有助於診斷。