簡體   English   中英

從文件讀取或將文件讀入緩沖區然后使用緩沖區(在C ++中)?

[英]Read from a file or read the file into a buffer and then use the buffer(in C++)?

我正在寫一個解析器,其中,我需要從文件中讀取字符。 但是我將逐字逐句地閱讀文件,如果條件不滿意,甚至可能會在中間停止閱讀。

那么建議創建一個文件的ifstream,並且每次都找到該位置並從那里開始讀取,或者我應該將整個文件讀入流或緩沖區,然后使用它?

如果可以,請使用內存映射文件。

Boost提供跨平台的: http//www.boost.org/doc/libs/1_35_0/libs/iostreams/doc/classes/mapped_file.html

文件有多大? 你做不止一次傳球嗎? 無論您是否將其讀入內存緩沖區,讀取文件將消耗(文件大小/ BUFSIZ )讀取以完成整個過程。 逐個字符讀取並不重要,因為底層讀取仍然一次消耗BUFSIZ字節(除非您采取措施來改變該行為) - 它只是逐個字符地將它們移出。

如果你正在讀它並一次性處理它,那么將它讀入內存將意味着你總是需要(文件大小/ BUFSIZ )讀取,其中 - 假設停止的原因是等量分布的 - 讀取它並處理line將取平均值(文件大小/ BUFSIZ )* 0.5讀取,這在一個大文件上可能是一個實質性的收益。

一個更重要的問題可能是“你正在尋找這個復雜的解決方案?” 找出可愛解決方案所花費的時間可能會占據你從尋找比標准“更好而不是文件結束,獲得角色和流程”解決方案更精彩的東西所獲得的任何收益。

每次尋找位置並且閱讀不會是更好的選擇,因為它會降低性能, 嘗試創建緩沖區並從中讀取這將是一個更好的主意和更高效

嘗試一直讀取緩沖區中的所有文件內容,然后使用緩沖區處理后續輸入需求,並且每次都不讀取文件,

在完整的服務操作系統(即Windows,Mac OS,Linux,BSD ...)上,操作系統將具有一種緩存機制,可以在某種程度上為您處理(並假設您的使用模式符合“常規”的某些定義)。

除非您遇到不可接受的性能,否則您可能希望快樂地忽略整個問題(即只使用天真的文件訪問原語)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM