Дирк и Изельзер уже предоставили ответы. Дирка, безусловно, самый простой, но в моей системе, по крайней мере, он немного медленнее, вероятно, потому что поднабор векторов с проверкой [
и length
дешев (и, согласно источнику, head
использует length
, дважды на самом деле):
> x <- rnorm(1000)
> system.time(replicate(50000, y <- head(x, -1)))
user system elapsed
3.69 0.56 4.25
> system.time(replicate(50000, y <- x[-length(x)]))
user system elapsed
3.504 0.552 4.058
Этот шаблон поддерживается для больших длин векторов и большего количества повторений. YMMV. Разборчивость head
, безусловно, превосходит предельное улучшение производительности [
в большинстве случаев.
Если gcc, objdump . Если визуальная студия, dumpbin .
Я бы предложил провести сравнение результатов работы инструмента для старой (маленькой) библиотеки и новой (большой) библиотеки.
Поиск в Google за 1 минуту дал мне страницу, которую я не могу отобразить. Погуглите это, и это будет ваша первая ссылка с 01.06.2009: tsql fix "столбец идентификаторов"
По сути, я бы предложил добавить ограничение внешнего ключа между всеми вашими реляционными полями в поле идентификатора до этого. выполнять любую перенумерацию (что также является ужасной идеей, если есть какие-либо отношения, строго потому, что если вы зададите этот вопрос, у вас будет чертовски много времени).
Если ваша таблица контактов является вашей ЕДИНСТВЕННОЙ таблицей или имеет НУЛЬ отношений на основе этого поля идентификатора, вы можете установить для свойства Identity значение NO, изменить нумерацию значений с 1 на COUNT (ID), затем установите для свойства Identity значение YES и повторно установите идентификатор для завершения, используя:
DECLARE @MaxID INT
SELECT @MaxID = COUNT (ID) FROM TableID
DBCC CHECKIDENT ('TableID', RESEED, @MaxID )
В этом сценарии вы можете использовать приведенный выше сценарий повторного заполнения после каждого набора удалений (но измените COUNT (ID) на MAX (ID) после того, как все будет изначально и правильно настроено, это немного повысит скорость по мере того, как таблица получит больше) до любых дополнительных вставок или обновлений ограничений внешнего ключа. Убедитесь, что вы используете ТРАНЗАКЦИИ, обернутые вокруг блоков удаления и повторного заполнения, и убедитесь, что таблица допускает только синхронные транзакции, это предотвратит размещение любых данных в середине повторного заполнения.
Сложный, а? Вот почему лучше начинать с правильной ноги. ;
Изменить: Если код находится в SCM, можете ли вы проверить версию источника, которая предоставила вам меньший объект. Затем сравните:
find. / tree_top (-name * .h -o -name * .cpp) | wc -l
find ./tree_top (-name * .h -o -name * .cpp) -print | сортировать> список деревьев
, а затем сделайте то же самое для нового дерева большего размера. Выполнение простого sdiff покажет любое большое количество новых файлов. HTH
BTW Пожалуйста, опубликуйте здесь свои выводы, так как я уверен, что многие люди заинтересованы в том, что вы узнаете.
HTH
BTW 12110] ура,
В Linux должно быть довольно легко увидеть, были ли добавлены новые файлы с рекурсивным различием. Они, безусловно, увеличат размер библиотеки. Затем вы можете использовать инструмент командной строки size в Linux, чтобы получить размеры каждого из новых объектных файлов и просуммировать их. Затем сравните эту сумму с увеличением вашей библиотеки и проверьте, насколько она отличается.
keysersoze's answer (compare the output of objdump
or dumpbin
) is correct. Another approach is to tell the linker to produce a map file, and compare the map files for the old and new versions of the DLL.