请教 - 关于使用文本文件记录数据慢的问题

软件使用文本文件来记录数据,前些天以客户反映,数据写入时间太长,能不能设置不记录数据,因为之前测试的时候,测试400个点的数据,写入的时间也就在1秒钟的样子,而客户实际写入是需要到一分半钟。

起初以为是不是系统的问题,因为给客户配置的是笔记本电脑,使用的win10家庭版的系统,而之前一直使用的是win7的系统,我想那就给客户改下程序,不记录数据,暂时使用。

这两天空闲下来,进行测试,分别测试了win7和win10的系统,起初没有发现异常,写入速度都挺快的,但是经过多次写入的话,写入的数据就开始变慢了,不管是win7还是win10,都是一样的结果,排除了系统的原因。

经过测试,发现是因为数据写的越来越多,导致的速度越来越慢。

测试电脑系统属性

测试写入时间记录

每次写入的数据量大概是45K。

这样下来,数据写的越来越多,写入的时间越来越长,但是每次写入的数据量是一定的,那这种原因就是文件多来越大,那么写入的速度就越来越慢了。

记录数据的方式是使用window的写配置文件的API函数,每次将数据格式化后,写入文件中

    //L
        strTemp.Format("%.2f",DataArray.GetAt(i).L);
        WritePrivateProfileString(strJiedian,"L",strTemp,strLogFileName);

        //x
        strTemp.Format("%.4f",DataArray.GetAt(i).x);
        WritePrivateProfileString(strJiedian,"xse",strTemp,strLogFileName);

        //y
        strTemp.Format("%.4f",DataArray.GetAt(i).y);
        WritePrivateProfileString(strJiedian,"yse",strTemp,strLogFileName);

到此可以判断,随着记录文件的增大,写入的速度变慢了。

那么要想就解决这个问题,该怎么办呢。

目前能想到的办法是使用数据库来记录数据,但是不知道要使用哪种数据库来记录。

哪位前辈能推荐一下一个轻量级的数据库,来就解决这个数据记录的问题。

或者说有其它办法来解决这个数据存储慢的问题。

我知道这种格式化输出的文本文件是比较耗时的,如果直接使用二进制文件记录的话,速度会很快。

但是这些记录需要一定的格式来记录,后续需要进行一些删除和选择输出的功能,所以使用二进制文件不太方便记录和删除。

哪位前辈能推荐一个合适的解决方案,在此多谢了。

哪位前辈能推荐一个合适的解决方案,在此多谢了。

哪位前辈能推荐一个合适的解决方案,在此多谢了。

重要的事要说三遍。

时间: 2025-01-06 09:53:34

请教 - 关于使用文本文件记录数据慢的问题的相关文章

如何利用Oracle外部表导入文本文件的数据

同事最近在忙数据一致性比对工作,需要对不同文本文件中的数据进行比对,有的文件较大,记录较多,如果用普通的文本编辑器打开的话,很显然,会很卡,甚至打不开. 基于此,可将该文本文件的数据导入到数据库中,在集合的层面进行比对. 那么如何将文本文件的数据导入到数据库中呢?在这里,主要利用了Oracle的外部表特性. Oracle外部表支持两种类型的驱动:一种是ORACLE_LOADER,外部表的数据必须来源于文件文件,另一种则是ORACLE_DATAPUMP,外部表的数据必须是二进制dump文件,该du

如何记录数据表信息的变更

在操作数据记录时,对重要的数据,我们需要记录每一次的变更,有没有好的方法呢? 在通用权限管理系统中提供了记录数据表信息变更的方法. 一.先看看效果截图 二.再看看修改记录表的表结构 三.对该表访问的业务类 1 public partial class ModifyRecordManager : BaseManager, IBaseManager 2 { 3 /// <summary> 4 /// 构造函数 5 /// </summary> 6 public ModifyRecord

Java基础知识强化之IO流笔记45:IO流练习之 把文本文件中数据存储到集合中的案例

1.  把文本文件中数据存储到集合中      需求:从文本文件中读取数据(每一行为一个字符串数据)到集合中,并遍历集合. 分析:      通过题目的意思我们可以知道如下的一些内容,      数据源是一个文本文件.      目的地是一个集合.      而且元素是字符串.      数据源:   b.txt -- FileReader -- BufferedReader  目的地:  ArrayList<String> 2. 代码示例: 1 package cn.itcast_02; 2

POJ 1952 BUY LOW, BUY LOWER DP记录数据

最长递减子序列,加记录有多少个最长递减子序列,然后需要去重. 最麻烦的就是去重了. 基本的思路就是:全面出现重复的值,然后还是相同长度的子序列,这里的DP记录的子序列是以当前值为结尾的时候,并且一定选择这个值的最长递减子序列, 那么就需要减去前面已经出现过了的子序列. 有点绕口. 举例就是9 8 9 8 2 和 10 5 12 5 3:这些例子去重. 本类型的题目如果不用记录数据是可以使用O(nlgn)的算法的,不过暂时不知道如何记录数据.故此这里只使用DP了. #include <stdio.

C++学习笔记之由文本文件读取数据到vector模板建立的二维数组 并存储为新的文本文件

阅读本文可首先参考: C++学习笔记之输入.输出和文件 测试数据: 1 /*读取txt文件到二维数组*/ 2 #include <iostream> 3 #include <fstream> 4 #include <vector> 5 #include <string> 6 7 using namespace std; 8 9 typedef vector< vector<int> > D2array; //二维数组 10 typed

把ArrayList集合的字符串存储到文本文件/把文本文件的数据存储到ArrayList集合中

把ArrayList集合的字符串存储到文本文件 分析: 1.ArrayList集合存储的是字符串 2.遍历ArrayList,获取数据 3.把数据存储到文本文件 4.由文本文件可知要用字符流 代码 package cn.idcast4; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; public class Day1

[lua, mysql] 将多条记录数据组合成一条sql插入语句(for mysql)

-- 演示将多条记录数据组合成一条sql插入语句(for mysql) function getTpl0(tname) -- 获取表各个字段 local t = { tpl_pack = {"packId","itemId","`group`","num","rate","rateType"}, } for k, v in pairs(t) do if tname == k then r

假设用一个名为text的字符串向量存放文本文件的数据,其中的元素或者是一句话或者是一个用于表示段分隔的空字符串。将text中第一段全改为大写形式

#include<iostream> #include<string> #include<vector> using namespace std; int main() { vector<string> str={"The is C++ program ","hfh ","","hfdshfisoid"}; for(auto it=str.begin();it!=str.end(

windows程序设计——飞机大战笔记(解决输入混合password账户,结局自己主动记录数据)

////////////////////2015/07/23/////////////////// ////////////////////by xbw/////////////////////////// ////////////////////环境 VS2013/////////////// 问题又攻克了,攻克了登陆仅仅能用数字登陆的问题.还有自己主动记录数据的问题.. 这个仅仅能用数字登陆是后来调试出来的bug,之前没想到.为了调试方便,仅仅用了账号为1.password为1来測试的,如今