C#和Unity的字符串读取和解析性能

本文关键字:和解 性能 读取 字符串 Unity | 更新日期: 2023-09-27 18:09:15

背景

首先,我有一个文本文件(CSV(,其中包含几列和数十万行。总文件大小为10MB。我使用Unity的资源,所以它加载为文本

相关代码为:

TextAsset txtData = Resources.Load("data.csv") as TextAsset;
string txt = txtData.text;
strReader = new StringReader(txt);
string line0 = strReader.ReadLine();

currentLine =strReader.ReadLine();
while (true) {// if last line is nothing we quit
    var values = currentLine.Split(',');    
    try {
        float x = (float)Convert.ToSingle(values[colX]);
        float y = (float)Convert.ToSingle(values[colY]);
        float z = (float)Convert.ToSingle(values[colZ]);
        float w = (float)Convert.ToSingle(values[colSize]);
        runningList.Add(v1);
    }catch(Exceptoion e){
    }
    currentLine = strReader.ReadLine();
}

问题

研究发现,阅读加解析速度较慢,影响了Unity的视觉效果。所以我用日志文件来查看。我每500行计算一次时间。奇怪的是,最后一组耗时12ms(500行(,倒数第二组耗时20ms,第一组的时间线性增加到1.5-1.7秒。

更多信息

当Unity以90赫兹绘制时,我使用线程读取字符串并解析数据。

问题

我应该在哪里查找问题?我使用了Unity资源、字符串读取器、拆分、解析来浮动。原因在哪里?有没有改进的方法?

随着时间的推移,它看起来很奇怪。

更新

在我使用文件流阅读器后,每组是2ms。那么它就是Unity TextAsset?

C#和Unity的字符串读取和解析性能

考虑到这种行为,它几乎是读取Linux文本文件的C#错误。

C#需要''r''n,但Linux只有。然后,合理的做法是,读取的每一行都会遍历整个文件,发现它是Linux文件,解析行的时间将与剩余的文件大小成比例。