【发布时间】: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,性能会怎样?