原本以為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的錯誤,當時上s。最后嘗試性地編譯了一份64位版本的程序,在64位的機器上跑,結果發現TM地居然可以正常地導出來,當時就覺得64bit好像比較牛逼的樣子),但是運行效率的話目測并不會有改善,如果有也只能是很小,這個運行速度主要還是跟硬盤讀寫、CPU和程序復雜度有關(扯的有點遠了),好了。暫時就想到這些,雖然只是個無關緊要的東西,但是自己入坑了,就寫出來希望看看能不能對入坑的人有點幫助。基本沒寫過博客,工作了,希望能繼續學習,共勉。
新聞熱點
疑難解答