【发布时间】:2016-03-03 08:04:54
【问题描述】:
我一直认为 UE 比 Unity 快,因为 UE 使用 C++ 和 Unity C#。 C++ 的哲学在这里似乎被打破了,那就是你为你使用的东西付费。现在添加了反射和垃圾收集。那么,如果 UE4 用 C++ 制作另一个 C#,为什么还要更快呢?
【问题讨论】:
-
从高级实体的角度来看,反射并不是很昂贵,而且 C++ 超过 C# 的速度不仅仅归结为反射。其中很大一部分与内存分配有关,例如也就是说,仅从反射的角度来看,UE 4 并没有将它用于最低级别的 UDT。它仍然是为你使用的东西付费——他们没有将它统一添加到整个系统中的每个
struct/class。 -
也许广义地说,C++ 仍然可以让您深入到最低级别的 C 风格代码——顺序/固定内存分配器只处理原始位和字节块,例如UDT 可以连续分配,即使它们不是一次全部分配。那些高级 ECS 风格的接口通常不是对性能最关键的部分——它是那些紧密的循环,代码库中相对较小的部分,我们从深入到最低级别的调整原生代码中受益。
-
这可能会导致:“为什么不采用 C# 并在 C++ 中实现对性能至关重要的小部分?”这可能是一个非常合理的策略——一种语言用于生产力,另一种语言用于性能。困难在于,即使对性能至关重要的部分很小,用一种语言完成这一切通常会更容易一些……采用 C++ 之类的东西并添加可以通过反射查询的属性等概念,仍然能够避免关键区域的此类成本......与使用统一具有此功能的语言并寻求另一种语言的速度相比。
标签: c# c++ unity3d unreal-engine4