2010-02-11 66 views
1

你能幫助我們理解一般的修補程序或更新如何在代碼級別上適用於已編譯和實時應用程序?如何修補或更新編譯後的應用程序?

我的意思是,如果我們想在某段代碼中修復錯誤(或改進功能),那麼已經編譯過的代碼會發生什麼變化?

+0

是什麼讓你覺得修補正在使用?你在談論ASP.NET影子程序集嗎? – 2010-02-11 19:33:11

+0

找到所有修補程序都很少見;帶寬和媒體非常便宜,只需重新分配新的組件就簡單多了。一個明顯的例外是那些巨大的打包遊戲數據/媒體文件。 – Aaronaught 2010-02-11 19:36:32

+0

@Aaronaught:對於安全更新它是相關的。 – 2010-02-11 19:40:07

回答

1

你說的是用二進制比較算法完成的。

這樣的算法找出了現有的二進制文件和目標二進制文件之間的差異。這通常比再次發送整個文件少得多,因此速度更快。如果您推送的更新與安全性相關,則速度是相關的,因爲速度更快的客戶獲得補丁的機會越少。

請參閱thisthis瞭解編譯可執行文件的二進制比較算法實現的最新和最好的實現。

+0

感謝您的詳細信息+1。所有這些可以總結如下:一般來說,更新應用程序的常見做法只是替換可執行文件,但有時(例如谷歌)使用更高級的方式來查找和替換部分不同的代碼? – rem 2010-02-12 08:10:12

+0

是的,除了替換不是「代碼的部分」,它是二進制文件的一部分。另外,正如Aaronaught所說,遊戲經銷商通常以這種方式分發補丁,就像Adobe IIRC一樣。所以這比你想象的更普遍。特別是當你有大量的數據和/或大量的客戶推送你的更新。 – 2010-02-12 08:35:11

1

很可能你只需要用新的編譯版本替換二進制文件,並確保它們仍然可以與所有相關的庫一起工作。

+0

謝謝Thomas,+1。所以,如果我得到某些應用程序的Service Pack的分配,並且它的大小爲1 GB,這並不意味着所有這些1 GB的數量都有變化,但只是這是整個可執行文件的另一個副本,以前安裝,僅包含一些更改? – rem 2010-02-12 08:18:06

+1

這取決於應用程序,但它可能是這種情況。通常這個可執行文件沒有1千兆,所以這個服務包只能替換相關的庫和可能的可執行文件,這可能仍然比所有資源的應用程序大小小得多。 – 2010-02-12 09:39:09