【问题标题】:Creating high-performance code for any CPU using C# and C++/CLI使用 C# 和 C++/CLI 为任何 CPU 创建高性能代码
【发布时间】:2013-08-11 17:31:20
【问题描述】:

我正在使用本机 C++ 创建 DirectX 应用程序,并使用 C++/CLI 来促进 IPC 与 C# 应用程序。

但是,在构建整个解决方案时;我很困惑如何让系统在 x86 和 x64 CPU 架构下工作,同时仍然尽可能保持高性能。

我对任何形式的仿真(例如 WoW32/64)保持警惕(并希望避免)。

当然,我可以使用 AnyCPU 编译 C# 项目。但是,我将 C++ 输出编译为什么?

我只是编译两个单独的版本吗?一个用于 x86,一个用于 x64?

谢谢

【问题讨论】:

  • 魔兽世界不是模拟。 x86-64 不是仿真。当然,使用 64 位 DirectX 驱动程序运行 32 位代码仍然可能会出现性能下降或限制。 (IA-64 确实模拟了 x86。也许这就是它不再被使用的原因。)

标签: c# c++-cli ipc cpu-architecture


【解决方案1】:

您应该进行 2 次单独的构建。

AnyCPU 意味着托管代码将在 32 位架构上以 32 位执行,在 64 位架构上以 64 位执行(JIT 负责处理)。 看这里:What does the Visual Studio "Any CPU" target mean?

但是由于您有非托管代码,您需要有 2 个不同的 dll 用于 32 位版本和 64 位版本。因此,除非您通过检测它确实是哪种架构来选择在运行时加载 和要使用的包装器 的非托管 dll(我不确定您实际上是否可以),否则您需要将 2 个分开构建。

【讨论】:

  • 澄清一下,(如对链接问题的接受答案所述)AnyCPU 表示程序集可以在 32 位或 64 位进程中加载。所以在 X64 Windows 上,它可以作为 32 位或 64 位代码执行。当从 AnyCPU 程序集创建进程时,X64 Windows 自然会创建一个 64 位进程。
  • +1 是的,刚刚做到了。创建了两个非托管 C++/CLI DLL 并安装到 GAC 中。然后 C# 项目在运行时动态加载正确的项目
猜你喜欢
  • 1970-01-01
  • 2011-12-05
  • 2010-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多