Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt-写入速度-在Qt中写入文件的最快方法是什么? 我已经找到了一些与Qt相关的文章,用C++编写了一个文件,但是我没有找到现有方法的比较和一个满意的答案。_C++_Performance_Qt_File - Fatal编程技术网

Qt-写入速度-在Qt中写入文件的最快方法是什么? 我已经找到了一些与Qt相关的文章,用C++编写了一个文件,但是我没有找到现有方法的比较和一个满意的答案。

Qt-写入速度-在Qt中写入文件的最快方法是什么? 我已经找到了一些与Qt相关的文章,用C++编写了一个文件,但是我没有找到现有方法的比较和一个满意的答案。,c++,performance,qt,file,C++,Performance,Qt,File,任务: 我需要将一大堆大约500.000到1.000.000的双值写入文件。由于我的程序结构,这些值保存在一个QList中,其中包含一些QVector,每个QVector的大小都相同。QVectors包含双值。此外,每个QList元素所属的列必须以不同的精度写入。每列用一个\t分隔 我尝试了几种方法: 使用运算符将QTextStream转换为QFile假设您按照下面的方式操作,则不太可能找到比fwrite更快的速度 double values[1000] = {...}; fwrite(val

任务: 我需要将一大堆大约500.000到1.000.000的双值写入文件。由于我的程序结构,这些值保存在一个QList中,其中包含一些QVector,每个QVector的大小都相同。QVectors包含双值。此外,每个QList元素所属的列必须以不同的精度写入。每列用一个\t分隔

我尝试了几种方法:


使用运算符将QTextStream转换为QFile假设您按照下面的方式操作,则不太可能找到比fwrite更快的速度

double values[1000] = {...};

fwrite(values, sizeof(double), 1000, f);

你真的需要把它们写成文本吗?将double转换为文本是一个非常重要的瓶颈。如果您真的关心性能,您可能应该首先用std::vector替换QList和QVector,因为QT容器是不可移动的。如果这是不可能的,你至少应该替换QVector的QLIST来获得更好的缓存行为。在另一方面,你可能想考虑@ CistRigo,这是不正确的。对齐方式和大小不大于void*的类型的QList具有QVector的布局和性能。Qt容器当然是可移动的——自Qt5.2以来,它们已经移动了近3年!在这里std::vector没有性能优势。没有向文件中写入值这样的事情:它太普通了,没有意义。您希望如何编写这些值?它是二进制文件吗?文本文件?如果是文本文件,您是否正在并行化从浮点到文本的转换?等等请给出一个完整的和最小的例子。嗨,斯文,好的,我会试试这个,谢谢!我试过使用stream@johnymow,我想你错过了最重要的部分:fwrite按原样写二进制数据,而不是按文本写。您的问题没有说明为什么需要文本形式的数据。您好,很抱歉,因为延迟了约1年,我很忙,为我现在使用的程序找到了一个可行的解决方案。@Kuba Ober:当然,文件写入不是很具体。在我的公司,我们需要生成包含多个列和大量行的文本文件10.000-~10.000.000值,以及每列精度的特定格式,科学或浮动,以便在Excel、Matlab、Origin中进行进一步处理,并与客户共享数据……我现在使用的仍然是用于存储值的QList。要在大约10个程序中将其更改为另一种类型需要付出巨大的努力。。。假设有历史原因;-。在编写时,我使用snprintf格式化双值,并将它们存储在字符数组中,用tab或换行符分隔。对于编写,我使用QFile::writechar*。。。它的性能很好。