将XNA编译为64位

8

我正在开发一个模拟器,它模拟了数百万个对象之间非常复杂的交互。

我使用XNA是因为它可以让我轻松地完成很多有用的事情,特别是渲染。

我的问题是,模拟只运行了几秒钟就遇到了OutOfMemoryException(内存不足异常)。我迅速意识到我的程序只在32位模式下运行,所以我只能使用少量的内存,而我的内存实际上相对较大。

如何在64位模式下运行XNA游戏呢?


1
右键单击项目,然后转到属性,应该会有一个相应的框。 - Sam I am says Reinstate Monica
使用更少的资源?例如:仅在需要时加载声音,而不是在加载时全部加载等。 - Cole Tobin
2
我同意@ColeJohnson的观点。我认为你最好开始微调你的代码。看看你在哪里实例化新对象,也许你可以重用它们。也许不是数百万次交互/对象,而是缩小到一百万次。这是你的决定,我们不知道足够关于你的项目来评论,但我会尝试现在提高我的性能。你可能只是有一个小的内存泄漏。如果有这么多计算正在进行,垃圾收集器将无法及时清理它。 - TyCobb
@TyCobb 即使我能让我的模拟程序使用更少的内存,它也永远无法在只有2-4 GB 的情况下运行。我想我只能换一种方法了。 - annonymously
右键单击项目无法使用,选项已经消失。 - BrainSlugs83
你可以展开“x86”并按编辑,大部分选项都在那里(你可以添加x64和ia64,但没有“ANY CPU”的选项[通常会有]),但是...它们不能正常工作。比如点击x64会创建一个x86的副本(通常不会这样)。里面有一些奇怪的魔法。 - BrainSlugs83
2个回答

3
XNA以前只支持32位。你可以尝试编译成64位,但是会遇到问题,因为没有64位的XNA库可供加载。我发现所有的评论都提醒用户要编译为x86。
编辑:我找到了一台安装有XNA 4的旧虚拟机。似乎没有强制它编译为64位的方法。即使我尝试创建一个新平台,也只能选择x86。

我看不到任何方法可以将其变为x64。它不允许我将其更改为x64。 - annonymously
1
@annonymously 这很可能是一个重要提示,说明它仍不支持x64。活动解决方案平台组合是否被禁用或只是没有显示x64?如果它只是没有x64,您可以尝试选择<新建...>,看看它是否出现在下一个屏幕中,但我不会惊讶XNA项目阻止您能够创建x64配置文件。 - TyCobb
是的,这只是一个很小的可能性,但这真的很痛苦。 - annonymously
你可能想要考虑使用MonoGame。我不确定它是否可以直接提供x64支持,但它建立在OpenGL和SharpDX之上,因此从理论上讲这样的事情应该是可能的。 - Cole Campbell
大多数情况下,我只想编译到任何CPU。我知道托管DirectX会施加一些32位限制,但很遗憾没有办法将32位部分放在进程外运行,或以其他方式使其工作等。 - BrainSlugs83

3

这并没有直接回答问题。我已经点赞了TyCobb的答案。

我以前也遇到过同样的问题。

您是否考虑切换到SlimDX?它是DirectX的包装器,允许您使用DirectX开发.Net应用程序。根据文档:

SlimDX sports complete support for both 32 and 64 bit targets.

它可能不像XNA那样用户友好,但我认为它可能是一个不错的选择。


如果它是一个包装器而不是替代品,那么它仍将调用32位函数。 - Cole Tobin
+1。不错的替代方案,一旦我找到一些空闲时间,你给了我一些可以玩耍的东西。 - TyCobb
3
@ColeJohnson,它不是在XNA之上的包装器,而是在DirectX之上的包装器。因此,它不会“仍然调用32位函数”。 - emartel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接