【问题标题】:Compiling XNA to 64-bit将 XNA 编译为 64 位
【发布时间】:2012-11-21 02:22:59
【问题描述】:

我正在开发一个模拟许多对象之间非常复杂的交互的模拟器,我的意思是数百万。

我使用 XNA 是因为它可以让我轻松完成有用的事情,尤其是在渲染方面。

我的问题是我在模拟几秒钟后就遇到了OutOfMemoryExceptions。我很快意识到我的程序只在 32 位模式下运行,所以我只获得了几 GB 的更大容量的 RAM。

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

【问题讨论】:

  • 右键项目,进入属性,应该有一个框
  • 使用更少的资源?例如:仅在需要时加载声音,而不是全部加载等。
  • 我同意@ColeJohnson。我认为你最好的选择是开始微调你的代码。看看你在哪里实例化新对象,也许你可以重用它们。也许不是数以百万计的交互/对象将其缩小到一百万。这是您的电话,我们对您的项目知之甚少,无法发表评论,但我现在会尝试设置我的性能上限。就你所知,也许你只是在某个地方有一个小的内存泄漏。如果进行这么多计算,垃圾收集器将无法及时清理它。
  • @TyCobb 即使我可以让我的模拟使用更少的内存,它也永远无法仅使用 2-4 GB。我想我只需要换其他东西。
  • 右键项目不起作用;缺少该选项。

标签: c# memory xna 64-bit xna-4.0


【解决方案1】:

XNA 曾经只有 32 位。您可以尝试编译为 64 位,但您会遇到问题,因为不会加载任何 64 位 XNA 库。我发现试图支持这一点的所有内容都是 cmets 提醒查看者编译为 x86。

要编译为 x64:右键单击您的解决方案并转到配置管理器。从那里选择 x64 作为您的 Active Solution 平台。您可能必须创建它,然后将所有项目选择为 x64。您也可以尝试构建为 Any CPU,因为您使用的是 64 位 Windows,它应该会自动以 64 位模式启动。

编辑:我发现我的一台旧 VM 上安装了 XNA 4。似乎没有办法强制它编译为 64 位。即使我尝试创建一个新平台,它也只允许我选择 x86。

【讨论】:

  • 我看不出有任何方法可以使它成为 x64。它不允许我将其更改为 x64。
  • @annonymously 这可能是一个很大的暗示,它仍然不支持 x64。活动解决方案平台组合是否已禁用或只是不显示 x64?如果它只是没有 x64,您可以尝试选择 并查看它是否显示在下一个屏幕中,但如果 XNA 项目阻止您创建 x64,我不会感到惊讶个人资料。
  • 是的,这是一个很长的镜头,但这是一个真正的痛苦。
  • 您可能想考虑使用 MonoGame。我不确定它是否提供开箱即用的 x64 支持,但它的实现是建立在 OpenGL 和 SharpDX 之上的,所以看起来这样的事情在理论上应该是可能的。
  • 大多数情况下,我只想编译到任何 CPU。我知道 Managed DirectX 施加了一些 32 位限制,但是太糟糕了,有办法让 32 位的部分脱离进程,或者让它以其他方式工作,等等。
【解决方案2】:

这并不能直接回答问题。我已经对 TyCobb 的回答投了赞成票。

我过去也遇到过同样的问题。

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

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

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

【讨论】:

  • 如果它是一个包装器而不是替代品,那么它仍然会调用 32 位函数
  • +1。不错的选择,一旦我找到一些空闲时间,你就给了我一些可以玩的东西。
  • @ColeJohnson 它不是 XNA 之上的包装器,它是 DirectX 之上的包装器,因此它不会“仍在调用 32 位函数”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-04
  • 1970-01-01
  • 2016-02-28
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
相关资源
最近更新 更多