關於編譯平臺anycpu的問題
阿新 • • 發佈:2019-02-08
原本以為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確實存在這個錯誤,沒辦法解決。這裡有的人可能會問,為毛不用新版本啊,新版本要錢啊