相关疑难解决方法(0)

什么是C++中高性能顺序文件I/O的最快方法?

假设以下内容...
输出:
文件打开...
数据"流式传输"到磁盘.内存中的数据位于一个大的连续缓冲区中.它直接从该缓冲区以原始格式写入磁盘.缓冲区的大小是可配置的,但在流的持续时间内是固定的.缓冲区一个接一个地写入文件.没有进行任何搜寻行动.
...文件已关闭.

输入:
从头到尾从磁盘读取一个大文件(按上面顺序写入).


是否有通用的指南来实现C++中最快的顺序文件I/O?

一些可能的考虑:

  • 选择最佳缓冲区大小的指南
  • 像boost :: asio这样的可移植库是否会过于抽象而无法暴露特定平台的复杂性,或者它们可以被认为是最优的?
  • 异步I/O总是优于同步吗?如果应用程序不受CPU限制怎么办?

我意识到这将有特定于平台的考虑因素.我欢迎一般准则以及特定平台的准则.
(我对Win x64最直接的兴趣,但我也对Solaris和Linux上的评论感兴趣)

c++ performance file-io

49
推荐指数
3
解决办法
3万
查看次数

如何快速(以C为单位)读取和解析带有数字的文本文件?

最后一次更新:我的同学用来fread()将整个文件的大约三分之一读成一个字符串,这可以避免内存不足.然后处理此字符串,将此字符串分隔到您的数据结构中.请注意,您需要关心一个问题:在此字符串的末尾,这些最后几个字符可能不能包含一个整数.考虑一种检测这种情况的方法,这样您就可以将这些字符与下一个字符串的前几个字符连接起来.每个数字对应于数据结构中的不同变量.您的数据结构应该非常简单,因为每次将数据插入到一个数据结构中时,它都非常慢.大部分时间花在将数据插入数据结构中.因此,处理这些数据的最快方法是:使用fread()将此文件读入字符串,将此字符串分隔为不同的一维数组.例如(只是一个例子,不是来自我的项目),我有一个文本文件,如:

72     24      20
22     14      30
23     35      40
42     29      50
19     22      60
18     64      70
 .
 .
 .
Run Code Online (Sandbox Code Playgroud)

每行是一个人的信息.第一栏是指人的年龄,第二栏是他的存款,第二栏是他妻子的年龄.然后我们用fread()这个文本文件读成字符串,然后我用stroke()它来分隔它(你可以用更快的方式将它分开).不要使用数据结构来存储分离的数据!我的意思是,不要这样做:

struct person
{
    int age;
    int deposit;
    int wife_age;
};
struct person *my_data_store;
my_data_store=malloc(sizeof(struct person)*length_of_this_array);
//then insert separated data into my_data_store
Run Code Online (Sandbox Code Playgroud)

不要使用数据结构来存储数据!存储数据的最快方法是这样的:

int *age;
int *deposit;
int *wife_age;

age=(int*)malloc(sizeof(int)*age_array_length);
deposit=(int*)malloc(sizeof(int)*deposit_array_length);
wife_age=(int*)malloc(sizeof(int)*wife_array_length);
// the value of age_array_length,deposit_array_length and wife_array_length will be known by using `wc -l`.You can use wc -l …
Run Code Online (Sandbox Code Playgroud)

c performance parsing text-processing readfile

16
推荐指数
2
解决办法
4862
查看次数

标签 统计

performance ×2

c ×1

c++ ×1

file-io ×1

parsing ×1

readfile ×1

text-processing ×1