1. 程式人生 > >關於編譯平臺anycpu的問題

關於編譯平臺anycpu的問題

原本以為anyCPU編譯的方式可以自動適配64位和32位的系統,然後最近在做一個專案的時候發現編譯平臺選擇的anycpu,但是程式在64位的機器上跑就直接崩潰了;一開始懷疑是oracle的問題,裝了一個32位的oracle,然而問題依舊。於是開始上網查資料,谷歌了一下之後才發現這個跟依賴的程式集有關。原本依照官方文件-


-來看的話這個錯誤是不應該發生的。首先,使用X86進行編譯的話,所有的程式都會強制轉換為32位程式進行編譯,而使用X64的話。則所有的程式集都會被強制轉換為64位進行編譯,而anycpu這是根據跑程式所安裝的OS來決定進行哪種轉換以及是否轉換。

綜上來看的話,最保險的方式是使用X86進行編譯,我不知道.net把anycpu作為預設選項的原因是什麼,或許是還有什麼配置我沒發現。長遠來看的話,64位的程式肯定是優於32位程式的,由於可供使用的記憶體空間以及定址空間更大,這個在很多情況下還是很有用的(比如之前在使用farpoint匯出資料到excel的時候,由於但是的資料量非常大,大概6萬行的樣子,然後程式的卡死或者崩潰,然後就報out of memory的錯誤,當時上spread官網檢視發現了老版本的farpoint確實存在這個錯誤,沒辦法解決。這裡有的人可能會問,為毛不用新版本啊,新版本要錢啊微笑

。最後嘗試性地編譯了一份64位版本的程式,在64位的機器上跑,結果發現TM地居然可以正常地匯出來,當時就覺得64bit好像比較牛逼的樣子),但是執行效率的話目測並不會有改善,如果有也只能是很小,這個執行速度主要還是跟硬碟讀寫、CPU和程式複雜度有關(扯的有點遠了),好了。暫時就想到這些,雖然只是個無關緊要的東西,但是自己入坑了,就寫出來希望看看能不能對入坑的人有點幫助。基本沒寫過部落格,工作了,希望能繼續學習,共勉。