从c++到c#unity 3d的缓慢脚本移植

本文关键字:缓慢 脚本 3d c++ c#unity | 更新日期: 2023-09-27 18:25:47

我想在统一脚本中使用以下算法(它是在三维空间中可视化图形的应用程序):

https://github.com/godlikemouse/ForceDirectedLayout/blob/master/src/layout.cc

现在,当我在c++中运行上述代码时,大约需要5-10秒才能完成迭代。我已经将整个代码移植到了一个统一的c#脚本中,大约需要20分钟才能完全运行。我真的不知道为什么会发生这种事,也不知道从哪里开始寻找。如果有人能引导我朝着正确的方向前进,我将不胜感激。

从c++到c#unity 3d的缓慢脚本移植

我预计会有一些放缓,但最多几秒钟。如果需要20分钟,那么您的端口有问题。

几个可能的候选人:

  1. 你正在向控制台输出大量信息,这可能会大大降低速度,所以除非需要,否则不要这样做
  2. 您不必要地创建了需要收集的对象和/或垃圾

也许最好的做法是在执行代码时使用Unity Profiler。它会让你知道时间花在哪里。您可以通过插入自己的示例来增强信息:http://docs.unity3d.com/ScriptReference/Profiler.BeginSample.html

我发现我的C#代码在Unity中运行得也很慢。我认为这是由于运行时环境/版本和可能的编译器优化没有进行。也许还有很多开销。

一定要在构建并运行编译后的Unity项目后测试性能。在我的测试中,从编辑器启动后运行Unity C#脚本的速度大约是构建和运行可执行文件的13%。

但即便如此,进一步的测试表明,我在编译项目中运行的C#的运行速度仅为控制台应用程序中运行相同代码的50%。

请参阅以下答案:https://codereview.stackexchange.com/a/146100/121804

我没有深入研究你的链接算法在做什么,但为了帮助加快速度:如果可能的话,把这些除法变成乘法,找到一种不使用sqrt的方法,findNode(id)函数可以通过将节点存储在哈希图(字典)中来大大加快速度。