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

标签 c# unity3d split string-parsing

背景

首先,我有一个包含几列和数十万行的文本文件 (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/

相关文章:

c# - 如何在单个游戏对象上添加多个音频源?

unity3d - 当 Unity 中的 timeScale 为 0 时,如何使 TrailRenderer 工作?

java - 在 Java 中拆分多个分隔符

python - 使用 split (' ' 拆分命令行是否有问题?

c# - 在 .Net Dynamics CRM 应用程序中保存要联系的父帐户

c# - 抛出异常时捕获所有线程的堆栈跟踪

c# - 将行尾保存到数据库

unity3d - 统一轮廓着色器

c - sscanf 字符串拆分不起作用

c# - Linq to Entities 中的联合订单