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?
考虑到这种行为,它几乎是读取Linux文本文件的C#错误。
C#需要''r''n,但Linux只有。然后,合理的做法是,读取的每一行都会遍历整个文件,发现它是Linux文件,解析行的时间将与剩余的文件大小成比例。