我是一名想要成为游戏开发者的人,我更喜欢使用 C#。当我问到用 C# 编写实时应用程序的缺点是什么时,我得到了重要的一点:垃圾收集及其对性能可能产生的不可预测的影响。
我的反问是,非托管 C# 呢?它与 C++ 相比(性能方面)如何?它是开发软件的有效选择吗?
我没有听到太多关于非托管 c# 的信息,而且我看到的所有“非托管 c# 与 C++”问题都没有得到回答或回答不准确。这些问题不在堆栈溢出上。
编辑:
我相信 umanaged C# 是“不安全的代码”。
C# 中的不安全代码不适用于开发单独的应用程序。您可以将不安全代码用于某种时间紧迫的操作,但通常这不是最有效和最方便的方法。恕我直言,它的主要目的是让 C# 有机会与非托管动态链接库和非托管代码集成,所以从我的角度来看,主要原因是集成。
我可以看到托管和非托管代码集成的 3 种常见方式:
另一方面,这是您的架构和概念决定:如果您需要完整的内存和性能控制,您可以使用 C++ 甚至纯 C 进行开发。如果您需要现代语言和现代技术的优势和简单性,您可以使用 .NET C# 进行开发. 或者您可以同时使用两者,如何集成它们如上所述。
您可以使用 C# 来构建游戏。问题是你到底打算做什么?您打算针对哪些平台,以及您打算将成品打磨到何种程度?
其他人提到了 Unity,它使用 C# 并提供了现成的游戏引擎和开发套件。唯一的缺点是免费版本有限制。
如果您想为了理解而构建自己的引擎,请查看XNA。或者,您可以使用 OpenGL 之类的包装器SharpGL。或者,也许您可以在某个地方找到早已死去的 Managed DirectX。或者,如果您真的很勇敢,您可以使用不安全的代码并包装 GDI 调用,这样您就不必处理极其缓慢的 GDI+ 实现。最后两个真的不推荐,只有 XNA 会为您提供不仅仅是在屏幕上绘制东西的方法。肯定有无数其他可能性,特别是考虑到 C# 开发人员可以使用Mono的内容。
无论您决定如何,垃圾收集器都不会妨碍您,如果这样做,不安全的代码也不会成为解决方案。
编辑:正如 cdoubleplusgood 所提到的,XNA 不再处于积极开发中。研究 Monogame并考虑跨平台开发的奇迹。
对于通用应用程序,C#(托管)是一种非常适合的语言,具有出色的性能。除非您有极高的要求,否则您当然可以将其用于游戏。看看Unity:
尽管如此,大多数 AAA 游戏工作室使用 C++ 作为他们的主要编程语言。话虽如此,如果你想在这样的工作室工作,你最好在 C++ 上投入一些精力。