背景
首先,我有一个包含几列和数十万行的文本文件 (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 行的时间。奇怪的是,最后一组耗时 12 毫秒(500 行),倒数第二组耗时 20 毫秒,时间线性增加到第一组的 1.5-1.7 秒。
更多信息
当 Unity 以 90 Hz 的频率绘制时,我正在使用一个线程来读取字符串并解析数据。
问题
我应该在哪里寻找问题?我使用 Unity 资源、字符串读取器、拆分、解析到 float 。原因在哪里,有没有办法改善?
随着时间的减少看起来很奇怪。
更新
我使用文件流读取器后,每组2ms。那么它是 Unity TextAsset 吗?
最佳答案
鉴于行为,这几乎是读取 Linux 文本文件的 C# 错误。
C# 需要\r\n 但 Linux 只有\n。那么合理的是每一行读取都会遍历整个文件,发现它是Linux文件,解析行的时间将与剩余文件大小成正比
关于c# - 使用 C# 和 Unity 的字符串读取和解析性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39760308/