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

String read and parsing performance with C# and Unity

背景

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

相关代码为:

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 行的时间。奇怪的是,最后一组耗时 12 毫秒(500 行),倒数第二组耗时 20 毫秒,第一组时间线性增加到 1.5-1.7 秒。

更多信息

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

问题

我应该去哪里找问题?我用Unity资源,字符串reader,拆分,解析为float。请问是什么原因,有什么办法可以改善吗?

随着时间的减少看起来很奇怪

更新

我使用文件流后reader,每组2ms。所以是Unity TextAsset?

鉴于行为,这几乎是读取 Linux 文本文件的 C# 错误。

C# 期望 \r\n 但 Linux 只有 \n。那么合理的是,每一行读取都会遍历整个文件,发现它是Linux个文件,解析行的时间将与剩余文件大小成正比