gpt4 book ai didi

c# - 从 32 位版本迁移到 64 位版本

转载 作者:太空宇宙 更新时间:2023-11-03 17:18:07 24 4
gpt4 key购买 nike

我们一直在进行 32 位构建,同时在 64 位机器上进行测试。为了在我们的应用程序中利用机器的力量,我们计划为我们的 C#/.NET 4.0 代码库构建 64 位版本。我们过去从未做过,也没有测试过,虽然它看起来很简单,但我们想了解以下内容:

  • 在此迁移过程中我们需要采取哪些必要步骤?
  • 在此迁移过程中我们会遇到什么问题(如果有的话)?坦率地说,我不确定我们可能会遇到什么问题?像我们的代码引用底层 DLL 的东西,其 32 位版本已被引用?我们需要更新所有引用资料吗?同样,我们在这里没有太多见识,因此这个具体问题可能无关紧要。但我们想找出任何可能妨碍平稳过渡的问题。
  • 我们在 32 位上进行了所有功能测试。我们可能没有太多时间对 64 位进行严格的测试?依赖我们的 32 位功能测试是否安全?

最佳答案

在简单的情况下,将 C# 代码从 32 位移动到 64 位只是更改build设置的问题。安全的 C# 代码在 64 位架构上的执行方式与在 32 位架构上的执行方式相同。

在实践中,您可能会遇到几个问题。以下是一些需要注意的事项:

  • 您的 C# 代码是否包含不安全代码?

    不安全的代码可以操纵指针,因此它可能以假定 32 位指针的方式编写。要查明您的项目是否包含不安全代码,您可以在代码库中搜索“不安全”关键字。

  • 您在使用 P/Invoke 吗?

    如果您使用 P/Invoke 调用 native 代码,CLR 运行时现在将寻找 64 位 DLL 而不是 32 位 DLL。如果在运行时没有找到 64 位 DLL,您将得到一个异常(“BadImageFormatException”或类似的东西)

    您可以在您的代码库中搜索“DllImport”以查看您是否正在使用 P/Invoke。

  • 您的项目是否包含脆弱的代码?

    将项目迁移到 64 位后,您将使用不同版本的即时 (JIT) 编译器。与 X86 JIT 相比,X64 JIT 编译器执行了一些更积极的优化。因此,一些碰巧在 X86 中运行的错误编写(通常是多线程)代码可能最终会在 X64 上崩溃。

  • 您是否在使用某些功能,例如编码(marshal)处理、序列化和 COM 互操作?

    所有这些功能的使用可能需要在 64 位版本中进行修改。要在您的代码中搜索的一些关键字包括“Marshal”、“StructLayout”、“FieldOffset”、“BinaryFormatter”和“Com”。

另请查看此白皮书,该白皮书进一步讨论了将 32 位托管代码迁移到 64 位:http://msdn.microsoft.com/en-us/library/ms973190.aspx

关于c# - 从 32 位版本迁移到 64 位版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9728250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com