2014-01-27 53 views
1

我有我自己的舊Windows服務(.Net 3.5),它在32位窗口上運行。現在我們有一個x64的Windows Server 2012,並且希望遷移這個服務。Windows服務 - 遷移到64位。爲了實現'64位優勢'的步驟

我的問題是:我應該做一些特別的這個Windows服務,以實現它在64位框架中的「所有優點」?我的意思是 - 我應該在Visual Studio 2010中編譯/編譯期間設置一些選項(項目/解決方案屬性)。或者是其他東西 ?或者我不需要做任何事情 - 無論它是如何構建的,它都會使用64位框架。

回答

4

這取決於構建目標:

  • 如果平臺的目標是x86,它將始終作爲一個32位可執行文件運行(或根本不)
  • 如果平臺的目標是x64,它將始終以64位可執行文件運行(或根本不運行)
  • 如果平臺目標是Any CPU沒有「啓用32位」啓用,它將在可能的情況下以64位運行,否則爲32位
  • 如果平臺的目標是Any CPU「首選32位」已啓用,它將作爲32位運行在可能情況下,其他64位

您可以使用Environment.Is64BitProcess檢查你的應用程序是如何運行(或者只需查看任務管理器)。

對於你的場景,Any CPU沒有「更喜歡32位」似乎是正確的選擇。

2

由於此項目是以3.5項目開始的,因此您可能不必更改任何東西。重要的設置是Project + Properties,Build選項卡,Platform目標設置。舊版Visual Studio中的默認值是AnyCPU。這就是說,它可以在任何CPU上運行,因此您可以在64位操作系統上獲得64位進程。如果它是「x86」(或選中「首選32位」複選框),那麼它將以32位模式運行。

它實際上並不重要,64位進程的唯一好處是它可以消耗更多的內存。那麼超過32位進程限制的2千兆字節。服務不應該對機器產生這種影響。

+2

還有很多其他的差異 - 例如完全不同的JIT和GC。我平靜地舉起我的手說:「我的服務使用了很多內存,比那更好......出於很好的理由」。哎呀,SQL Server是「一項服務」 - 你當然不會將其限制爲2GB/3GB。 –

+1

呃,他們仍然jit代碼和收集垃圾,這是沒有什麼不同。不太確定您的SE dbase機器是否具有代表性:) –

+1

有很多情況下,抖動的工作方式,不同的問題做法或不適合64位算法的差異以及其他差異使64贏得了強勁的勝利。我有一段代碼在64位上比在32位上運行快6-8倍,有時甚至更多;現在它已經在64位的使用中進行了優化,所以它不是一個典型的例子,但它確實是一個例外。也就是說,情況正好相反。即使在64位上運行,較小的內存使用也可以使32位代碼比64位更快。 –