【问题标题】:Reading from a text in Unity is a lot slower than C# console application在 Unity 中读取文本比 C# 控制台应用程序慢很多
【发布时间】:2019-06-12 20:50:19
【问题描述】:

基于this 问题,我有一个这种格式的文本文件,包含 7500 万行:

X Y Z colorvalues -0.680891 -90.6809 0 204 204 204 255

我正在从文件中读取,操作非常缓慢。经过一番讨论,我意识到只有在 Unity 上操作很慢。我测试了以下代码:

StreamReader sr;

// Use this for initialization
void Start () {
    sr = new StreamReader(Application.dataPath + "/PointCloud/DVS.txt");
    Debug.Log("Read is called");
    Read();
}

void Read()
{

    string line;
    while ((line = sr.ReadLine())!=null)
    {

    }
    Debug.Log("Read has ended");
}

只读取一个txt文件需要3分钟,无需任何其他操作。当我使用 C# 应用程序或 C++ 对其进行测试时,最多需要 30 秒。我真的很好奇是什么导致了这个问题。如果有人能解释为什么这个问题会在 Unity 上发生,我会很高兴。谢谢!

这是带有新线程的 Profiler 的照片。

【问题讨论】:

  • 这有几个原因,1是c++实际上比c#快得多。另一个是 Unity 在后台做了很多普通的 c# 控制台应用程序没有的事情。
  • 如果您创建一个新线程并让该线程处理您的读取操作需要多长时间,我会很好奇结果。
  • 我最初是在一个新线程中完成的,实际上需要相同的时间。它也很长。
  • 我很好奇 Unity3d 的分析器认为时间花在了哪里。
  • Unity 使用与桌面 c# 不同的垃圾收集器。如果设置Scripting.GarbageCollector.Mode = GarbageCollector.Mode.Disabled ,性能会怎样?

标签: c# unity3d mono


【解决方案1】:

今天我发现了问题所在。我在编辑器和为一些调试而构建的开发中测试这些代码。当我为 Windows 正确构建它时,读取速度要快得多,并且在大约 30 秒内读取所有行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多