gpt4 book ai didi

.net - 为 64 位窗口操作系统构建时针对 x86 与 AnyCPU

转载 作者:行者123 更新时间:2023-12-03 23:46:06 25 4
gpt4 key购买 nike

我有一个为 .NET 2.0 编写并针对 的现有 C# 应用程序AnyCPU 在这一刻。它目前引用了一些我没有源代码的第三方 .NET DLL(我不确定它们是为 x86、x64 还是 AnyCPU 构建的)。

如果我想专门在 64 位 Windows 操作系统上运行我的应用程序,我应该以哪个平台为目标才能让我的应用程序无错误地运行?我目前的理解是针对:

  • x86 :如果为 x86 构建了至少一个第三方 .NET dll 或使用 p/Invoke 与 Win32 DLL 交互。应用程序将在 32 位和 64 位操作系统上以 32 位模式运行。
  • x64 :如果所有第三方 .NET dll 已经为 x64 或 AnyCPU 构建。应用程序只能在 64 位操作系统中运行。
  • AnyCPU :如果所有第三方 .NET dll 已经为 AnyCPU 构建。应用程序将在 32 位操作系统上以 32 位模式运行,在 64 位操作系统上以 64 位模式运行。

  • 另外,我是否正确地相信,虽然在构建引用第三方 x86 .NET DLL 的应用程序时以 AnyCPU 为目标不会产生任何错误,但当应用程序在 64 位操作系统上运行时尝试加载这些 DLL 时,它会引发运行时异常。

    因此,只要我的第三方 DLL 之一正在执行 p/Invoke 或者是 x86,我只能针对此应用程序以 x86 为目标吗?

    最佳答案

    您可以从 AnyCPU DLL 执行 P/Invoke,您只需要对 P/Invoke 定义更加小心(即您不会无意中假设为 32 位或其他内容)。问题是很难知道第 3 方 DLL 是否在没有 Reflector 和反汇编的情况下做正确的事情(当然,除非开发人员特别声明支持 64 位)。

    但除此之外,你几乎是准确的。

    老实说,对于 99% 的应用程序,以 x86 为目标是完全可以接受的。实际上受益于 64 位的应用程序数量相对较少。 (性能问题通常会出现一些问题:更多的寄存器被 x86 模式的寄存器重命名和更大的数据结构所抵消,因为指针是原来的两倍 [在像 .NET 这样的引用繁重的系统中更糟])

    关于.net - 为 64 位窗口操作系统构建时针对 x86 与 AnyCPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2947264/

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