2010-02-11 3 views
1

Не могли бы вы вообще понять, как применение патча или обновления работает для уже скомпилированного и живого приложения на уровне кода?Как работает исправление или обновление скомпилированного приложения?

Я имею в виду, если мы хотим исправить ошибку (или улучшить функциональность) в некотором фрагменте кода, что происходит с этим уже скомпилированным кодом, как он изменяется?

+0

Что заставляет вас думать, что исправление используется? Вы говорите о теневых сборках ASP.NET? –

+0

Довольно редко можно найти исправления в использовании; пропускная способность и мультимедиа настолько дешевы, что проще просто перераспределить новую сборку. Единственное примечательное исключение - для тех гигантских упакованных игровых данных/медиафайлов. – Aaronaught

+0

@Aaronaught: для обновлений безопасности это актуально. –

ответ

1

То, о чем вы говорите, выполняется с помощью бинарного алгоритма.

Такой алгоритм находит различия между существующим двоичным файлом и целевым двоичным файлом. Это, как правило, намного меньше места, чем отправка всего файла снова, так что это быстрее. Скорость имеет значение, если вы нажимаете на обновления, связанные с безопасностью, потому что быстрее клиенты получают исправление, чем меньше возможностей использования возможностей.

См. this и this за последние и самые большие реализации алгоритмов бинарного дифференциала для скомпилированных исполняемых файлов.

+0

Спасибо за детали, +1. Могут ли все это быть суммированы следующим образом: общая, обычная практика в обновлении приложения просто заменяет исполняемые файлы, но иногда кто-то (например, Google) использует более продвинутый способ поиска и замены частей кода, которые отличаются только? – rem

+0

Да, за исключением того, что замена не относится к «частям кода», она относится к частям двоичного файла. Кроме того, как сказал Аароноут, дистрибуторы обычно распространяют патчи таким же образом, как и Adobe IIRC. Так что это более распространено, чем вы думаете. Особенно, когда у вас много данных и/или множество клиентов, чтобы подтолкнуть ваше обновление. –

1

Скорее всего, вам просто придется заменить двоичные файлы новой скомпилированной версией и убедиться, что они все еще работают со всеми зависимыми библиотеками.

+0

Спасибо Томас, +1. Итак, если я получаю дистрибутив пакета обновления для некоторого приложения и имеет размер 1 ГБ, это не означает, что есть изменения в количестве всех этих 1 gb, но только то, что это еще одна копия всего исполняемого файла, ранее установленный, содержащий только некоторые изменения? – rem

+1

Это зависит от приложения, но это, вероятно, так. Обычно исполняемый файл не имеет 1 гига, поэтому пакет обновления может заменять только соответствующие библиотеки и, возможно, исполняемый файл, который, вероятно, по-прежнему намного меньше размера приложения со всеми ресурсами. –

Смежные вопросы