QString使用split处理大数据时的低效率问题

QFile file(filepath1);
if(!file.open(QIODevice::ReadOnly))
{
   return dtre;
}
QTextStream txtRead(&file);
QString line = txtRead.readLine();
QStringList list = line.split(QRegExp("\\s+"));
file.close();

       一直在使用QString的split方法处理固定分隔符的大段数据,它也支持正则表达式形式的分隔符,功能强大。但是最近我在使用它处理大数据量,并且要求实时快速时,遇到了障碍,因为系统的时序要求,每1s内留给它处理的时间并不多,所以使用split处理超过4M的数据段时,耗时过长。

      当然在pc机上我测试过split处理4M的数据段需要0.2-0.3s,因为pc端的内存空间和处理器性能都远远好于嵌入式设备,所以性能上没有表现劣势。应用在嵌入式设备上就会造成系统时序混乱。尝试过QVector lines = line.splitRef(QRegExp("\\s+")),专门为性能而设计,但也没有明显改善,最后的解决方式是使用纯c代码编写了split功能方法,处理效率得到改善。

QString line = txtRead.readLine();
QByteArray utf8 = line.toUtf8();
char *str = utf8.data();
const char s[2] = " ";
char *token;
int length = 0;
QString element;

/* 获取第一个子字符串 */
token = strtok(str, s);

/* 继续获取其他的子字符串 */
while(token != NULL)
{
   element= QString::fromUtf8(token);
   length++;
   token = strtok(NULL, s);
}

你可能感兴趣的:(qt,QString,split)