【发布时间】:2016-11-18 19:12:15
【问题描述】:
我正在尝试以更快的方式读取文件。我目前的做法如下,但对于大文件来说非常慢。我想知道是否有更快的方法来做到这一点?我需要存储一个结构体的值,我在下面定义了它。
std::vector<matEntry> matEntries;
inputfileA.open(matrixAfilename.c_str());
// Read from file to continue setting up sparse matrix A
while (!inputfileA.eof()) {
// Read row, column, and value into vector
inputfileA >> (int) row; // row
inputfileA >> (int) col; // col
inputfileA >> val; // value
// Add row, column, and value entry to the matrix
matEntries.push_back(matEntry());
matEntries[index].row = row-1;
matEntries[index].col = col-1;
matEntries[index].val = val;
// Increment index
index++;
}
我的结构:
struct matEntry {
int row;
int col;
float val;
};
文件格式如下(int、int、float):
1 2 7.9
4 5 9.008
6 3 7.89
10 4 10.21
更多信息:
- 我知道文件在运行时的行数。
- 我正面临瓶颈。分析器说 while() 循环是瓶颈。
【问题讨论】:
-
您是否面临瓶颈?这通常被认为是“最快”的方式,但
mmap可能是另一种选择,具体取决于您使用文件内容的方式。 -
您的分析器说哪个部分很慢?文件读取?
vector重新分配?fstream操作? -
特定平台:内存映射文件。
-
您的分析器可能会说 while 循环占用了大部分执行时间,但 这是意料之中的。 某事 必须占用执行时间,否则您的程序将无法运行。这并不意味着您的 while 循环是一个瓶颈。瓶颈意味着某些事情导致的减速比预期或被认为是最佳的要多。
-
当然
while循环被识别为慢速部分,因为所有工作都在循环内完成!你需要更多的粒度。