在Visual Studio下编写64位应用程序的注意事项

一、确定在64位操作系统上运行还是在WOW64下运行。

  在Visual Studio平台中最后对64位应用程序编译时,需要指定这个应用程序是在64位操作系统上作为本机应用程序运行还是在WOW64环境下运行。这个WOW64环境是一个由操作系统提供的兼容性环境。这个环境主要是让32位应用程序也能够在64位的操作系统上运行。换句话说,在编译时要确定产生的应用程序是真正的64位应用程序(只能够在64位操作系统上运行),还是伪64位应用程序(其实是32位应用程序,只是可以借助WOW64在64位操作系统上运行)。

 在确定这个内容的时候,有一个内容笔者要特别提醒大家。通常情况下在64位操作系统上,所有使用NET Framework 1.1以前版本生成的应用程序都将被视作为32位应用程序,并且始终在32位公共语言运行上的WOW64环境下运行;而在2.0版本以后生成的32位特定应用程序可以在64位平台上的WOM64环境下运行。这两个版本之间的细微差异,各位读者可以开发一个小程序测试一下即可。其中的内涵是只可意会、不可言传呀。

二、正确部署Visual Studio开发环境。

在开发64位应用程序之前,需要明白一点。到目前为止,Visual Studio 2008仍然是一个32位的应用程序。在安装部署时,如果是在X86的计算机上(32位操作系统),则其将安装32位的CLR版本。而如果在64位操作系统上安装部署时,安装进程将同时安装32位的CLR版本和合适的64位CLR。注意当将其部署到64位操作系统的时候,它将在WOW64环境下运行。

  此时笔者认为需要注意一个细节问题。当在Wom64环境下运行32位应用程序时,应用程序只限于在一个处理器上执行。也就是说应用程序不能够享受64位操作系统所带来的性能上的提升。而单处理器执行会降低32位应用程序在基于Itanium系统上运行时的性能和可伸缩性。为此如果对于性能要求比较高的应用程序或者有负载比较高的服务器,尽量不要采用兼容的方式。即32位应用程序在32位操作系统上运行,而不要在Wom64环境下运行。否则的话,不但不能够享受64位操作系统带来的好处,反而会降低应用程序原有的性能,得不偿失

三、32位应用程序在64位CLR上运行可能导致意外的结果。

  虽然64位操作系统提供另一个WOW64环境,使得32位应用程序能够在64位操作系统上运行。也就是说,在大部分情况下32位应用程序可以在32位或者64位操作系统上同等的运行,其最终的结果都是相同的。但是有时候也会有意外。这些意外主要是以下原因所造成的。

  如在应用程序的结构中包含一些大小随平台而改变的成员。如指针类型的对象,其会操作操作系统位数的不同而改变。再如指针算法中如果包含固定大小,或者不正确的平台调用与COM声明等等,都会导致32位应用程序在64位CLR上运行出现一些意外的结果。

为此笔者特别提醒,如果开发人员设计一些兼容的应用程序时(即可以同时在32位与64位应用程序上运行),必须要注意这些因素对应用程序运行过程的影响。在开发中,要尽量避免使用这些对象,以免不必要的麻烦。

四、如何判断某个应用程序是否适合在64位操作程序上运行。

  在应用程序开发时,开发人员可能会借鉴已有的应用程序。此时他们就需要判断手中的应用程序能否在WOW64环境下运行。或者说,只有在特定的平台下,如32位操作系统或者64位操作系统下(而不是WOM64)下运行。要实现这个目的的话,开发环境提供了一个Corflags的命令。简单的说,在命令行中使用corflags.exe可以确定某个exe或者dll是仅仅在特定平台上运行,还是只可以在WOW64环境下运行。另外在必要的情况下,程序开发人员还可以利用这个命令来更改应用程序的平台状态。

五、调试64位应用程序与32位应用程序之间的差异。

  在开发平台中自带有应用程序的调试工具。应用程序调试一般包括本地调试与远程调试。对于一些中大型的应用程序而言,远程调试是必须的。这里需要注意,在任何情况下,如果在64位计算机上安装远程调试都会同时安装32位和64位版本的远程调试监视器。不过在调试64位应用程序的时候,则必须要选择正确的版本。如需要选择“远程调试器X64)。否则的话,调试结果会有偏差

其次一般来说调试64位应用程序与调试32位应用程序并没有实质上的差异。但是从细节上来说,有两个差异需要提醒一下。一是在32位应用程序调试的时候,可以使用编辑并继续的功能。可是如果对于64位应用程序,这个功能不可用。二是对于32位应用程序而言,可以以混合模式调试从本地代码到托管代码的调用。但是在64位应用程序中却无法实现,也不能够实现从托管代码到本地代码的调用。总的来说,就是64位应用程序调试时一些功能受到了限制,不过并不会影响到大局。

  第三在执行远程调试的时候,可能需要对防火墙进行一些额外的设置。通常情况下,必须配置Windows防火墙才能够启用远程调试功能。如在第一次启动远程调试时,VisualStudio开发环境会在主机上进行必要的配置;当第一次在远程计算机上运行远程调试监视器的时候,远程调试监视器也会在远程计算机上配置Windows防火墙,以便远程调试能够顺利进行。这里需要注意,调试计算机所采用的系统不同,其防火墙的配置工作也有所不同。如对于XP操作系统来说,其配置完全是透明的。也就是说,可以让远程调试监视器来完成防火墙的配置工作,而不需要用户的参与。而对于Vista操作系统来说,则必须要先对用户授予必要的权限,然后才能够让远程调试监视器对防火墙进行必要的配置。通常情况下,对于那些第一次接触远程调试的用户来说,笔者建议使用远程调试器配置向导在远程计算机上配置防火墙。根据想到配置过一次之后,就可以了解整个配置过程。一般来说,在根据向导配置中,不需要更改任何的值,全部采用默认值即可。而且如果进行的是SQL调试时,远程调试器会在调试期间自动启动。相反,如果进行的是SQL以外的调试,则需要手工启动远程计算机上的远程调试监视器。只需要通过命令msvsmon.exe就可以完成。

总而言之,开发64位应用程序与开发32位应用程序是大同小异。但是如果这些差异的地方没有抓住的话,就可能出现问题。特别是在开发一些兼容性的应用程序时,需要注意由于平台的变化对应用程序运行造成的影响,包括性能上的差异与应用程序行为和结果的差异。笔者自己的意见是反对32位的应用程序在WOM64环境下运行,即反对兼容模式。因为在这种情况下,很多意外情况程序开发人员很难控制。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值