首页 > 学院 > 开发设计 > 正文

关于编译平台anycpu的问题

2019-11-10 18:18:45
字体:
来源:转载
供稿:网友

原本以为anyCPU编译的方式可以自动适配64位和32位的系统,然后最近在做一个项目的时候发现编译平台选择的anycpu,但是程序在64位的机器上跑就直接崩溃了;一开始怀疑是Oracle的问题,装了一个32位的oracle,然而问题依旧。于是开始上网查资料,谷歌了一下之后才发现这个跟依赖的程序集有关。原本依照官方文档-

-来看的话这个错误是不应该发生的。首先,使用X86进行编译的话,所有的程序都会强制转换为32位程序进行编译,而使用X64的话。则所有的程序集都会被强制转换为64位进行编译,而anycpu这是根据跑程序所安装的OS来决定进行哪种转换以及是否转换。

综上来看的话,最保险的方式是使用X86进行编译,我不知道.net把anycpu作为默认选项的原因是什么,或许是还有什么配置我没发现。长远来看的话,64位的程序肯定是优于32位程序的,由于可供使用的内存空间以及寻址空间更大,这个在很多情况下还是很有用的(比如之前在使用farpoint导出数据到Excel的时候,由于但是的数据量非常大,大概6万行的样子,然后程序的卡死或者崩溃,然后就报out%20of%20memory的错误,当时上sPRead官网查看发现了老版本的farpoint确实存在这个错误,没办法解决。这里有的人可能会问,为毛不用新版本啊,新版本要钱啊。最后尝试性地编译了一份64位版本的程序,在64位的机器上跑,结果发现TM地居然可以正常地导出来,当时就觉得64bit好像比较牛逼的样子),但是运行效率的话目测并不会有改善,如果有也只能是很小,这个运行速度主要还是跟硬盘读写、CPU和程序复杂度有关(扯的有点远了),好了。暂时就想到这些,虽然只是个无关紧要的东西,但是自己入坑了,就写出来希望看看能不能对入坑的人有点帮助。基本没写过博客,工作了,希望能继续学习,共勉。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表