Комментарии 59
торт!
+5
занятно, но я всё же работал с файлами истории напрямую, без COM-интерфейса, если важна скорость.
+1
Клевая статья. И с технической точки зрения, и с литературной :)
+3
А расскажите про хронометры? Почему 1 или 3? Чего я не улавливаю?
+2
Читал до конца в надежде увидеть ссылку на утилитку! Но был жестоко обломлен!
:-)
:-)
+1
Кстати, опаньки, если ты тот Шодан о котором я думаю :) Судя по профилю — тот.
+2
Насчет установки Breakpoint для проверки стеков: на самом деле, в CodeAnalyst можно включить сохранение стеков для всех замеров (и это совершенно не тормозит, т.к. работает через встроенный механизм Windows) — во время настройки профайла (там где нужно указать имя профилируемого приложения) найдите маленькую незаметную галочку «CSS» и поставьте.
+1
В прошлых версиях она, кстати, называлась более внятно — Call Stack Sampling
0
Можно и я пробовал. Только до собственно программы стек не разматывается и поэтому ни в отладчике VS, ни в дереве CA все равно моего кода не видать. Чтобы понять, какой вызов приводит к чему и в каком объеме, так и эдак приходится вручную обставлять программу breakpoint-ами либо printf-ами.
+1
Если до программы не доходило — то вероятно, вы указали слишком маленькое число сохраняемых фреймов. Впрочем возможен и другой вариант — оптимизация EBP, которая не дает нормально раскрутить стек, тогда конечно отладчиком приходится.
0
Сколько же там ещё такого говнокода… Скайп ведь ещё тот тормоз.
+1
(пожимает плечами) Меня пока отлично устраивает, если что.
Для старшего поколения вообще единственный вариант, что другое им ставить, чтобы они справлялись с интерфейсом, я не знаю.
А говнокода везде и всюду кучи, не в его наличии или отсутствии счастие.
Для старшего поколения вообще единственный вариант, что другое им ставить, чтобы они справлялись с интерфейсом, я не знаю.
А говнокода везде и всюду кучи, не в его наличии или отсутствии счастие.
+2
И с каждой новой версией становится все прожерливее(
+1
Skype != skype4com
0
циферки всегда кратны 4, и вообще сильно смахивают на размер стека, а вместо ведущей собаки для «публичных» символов типично подчеркивание
странно читать такое в статье про низкоуровневый разбор и API Hooking
+7
угу, манглинг называется.
+2
Аналогично, тоже бросилось в глаза. :-) Если что, это стандартное декорирование имён stdcall-функций — _имяФункции@размерАргументовВСтеке. У cdecl декорирование ограничивается только подчёркиванием.
Возможно, такое декорирование специфично только для майкрософтского link.exe.
Возможно, такое декорирование специфично только для майкрософтского link.exe.
0
Ой, Вы знаете, я за свою жизнь уже неоднократно узнавал, что штуки, до которых я дошел своим умом или случайно обнаружил, оказывается, кем-то уже давно придуманы и как-то названы. Когда знакомился с паттернами проектирования — большинство уже были мне известны, просто не знал, что остальной мир их называет вот именно такими именами. Тот факт, что автору не было известно «стандартное декодирование имён stdcall-функций» не имеет никакого абсолютно значения, если ему удалось выполнить поставленную задачу.
+4
Таки нет сил более молчать ;)
Ребята, там ведь в тексте прямо сразу (сразу) после того предложения про циферки русским по белому все (все) написано.
Вы не поверите, наверное, но я того — типа знаю, что такое mangling, зачем в целом нужен, что такое c++filt, чем __stdcall отличается от __fastcall, и еще массу странных вещей.
Конкретных правил декорирования наизусть, разумеется, не помню — тк. требуется единицы раз и не каждый год.
Смысл, однако, в том, что (снова) заметив несложную зависимость — даже не нужно тратить вреия, гуглить и подновлять в голове эти правила, насущная мини-подзадача мгновенно решается и так, причем — быстрее.
Кроме того, заметка написана — не для меня, и даже не для тех, кому слово mangling последние 20 лет родное, ошибки компиляции boost-а читаемы, а всю заметку можно сжать к трем строкам «skype4com дрочил lcmapstringex как одуревший; хукнулся detours-ом; сделал fastpath; начало 3.6x летать; detours сила; skype4com FUUU» совершенно без потерь.
Но, наверное, революционные выводы о степени незнаний автора делать интереснее ;)
Ребята, там ведь в тексте прямо сразу (сразу) после того предложения про циферки русским по белому все (все) написано.
Вы не поверите, наверное, но я того — типа знаю, что такое mangling, зачем в целом нужен, что такое c++filt, чем __stdcall отличается от __fastcall, и еще массу странных вещей.
Конкретных правил декорирования наизусть, разумеется, не помню — тк. требуется единицы раз и не каждый год.
Смысл, однако, в том, что (снова) заметив несложную зависимость — даже не нужно тратить вреия, гуглить и подновлять в голове эти правила, насущная мини-подзадача мгновенно решается и так, причем — быстрее.
Кроме того, заметка написана — не для меня, и даже не для тех, кому слово mangling последние 20 лет родное, ошибки компиляции boost-а читаемы, а всю заметку можно сжать к трем строкам «skype4com дрочил lcmapstringex как одуревший; хукнулся detours-ом; сделал fastpath; начало 3.6x летать; detours сила; skype4com FUUU» совершенно без потерь.
Но, наверное, революционные выводы о степени незнаний автора делать интереснее ;)
+4
Вы отправили им баг репорт developer.skype.com/SkypeGarage/ReportIssue?
0
От этих локалей одно только зло. Как же я их не люблю.
Заметил, что со многими Open Source программами (и не совсем Open Source, например Chrome Browser) теперь идет в комплекте какое-то уродище под названием icudt42.dll весом (да, да, это не опечатка) 11 мегабайт! Это библиотека от IBM (те еще разработчики) для работы с какими-то там кодировками и локалями и она весит 11 мегабайт. Это же ужас какой-то. Мне например вполне хватает пары кириллических кодировок и UTF-8. Мне кажется, это неоптимально и неразумно, ради полувымерших и малораспространенных языков, ставить такую тяжелую бибилиотеку.
Зачем ради всяких недогосударств, которые не могут перейти на нормальную письменность ставить 11-мегабайтную библиотеку? Чтобы они могли на своем недоязыке делать сортировку с учетом локали? по мне, так проще отправить к ним флот нато и убедить перейти на нормальный алфавит, чем сотням миллионов пользователей качать эту гадость.
P.S. Специально зашел на сайт проекта и посмотрел что в этой библиотеке такое тяжелое:
всякие китайские кодировки типа Simplified Chinese (GB18030) (533 Kb), корейские (штук 8 кодировок по 150 Кб каждая, куда им столько??), Break Iterators для языка кхмеров на 832 Кб неужели на нем еще кто-то разговаривает?), Thai word break rules (244 Кб), Collators для китайского и корейского, и еще всякий хлам по мелочи. В Китай, конечно, флот НАТО не отправишь, это печально, но как минимум вынести весь этот треш в отдельную библиотеку для восточных пользователей вполне можно было, ибо 99% людей это не нужно. Грустно становится за сегодняшнее поколение разработчиков из IBM.
Заметил, что со многими Open Source программами (и не совсем Open Source, например Chrome Browser) теперь идет в комплекте какое-то уродище под названием icudt42.dll весом (да, да, это не опечатка) 11 мегабайт! Это библиотека от IBM (те еще разработчики) для работы с какими-то там кодировками и локалями и она весит 11 мегабайт. Это же ужас какой-то. Мне например вполне хватает пары кириллических кодировок и UTF-8. Мне кажется, это неоптимально и неразумно, ради полувымерших и малораспространенных языков, ставить такую тяжелую бибилиотеку.
Зачем ради всяких недогосударств, которые не могут перейти на нормальную письменность ставить 11-мегабайтную библиотеку? Чтобы они могли на своем недоязыке делать сортировку с учетом локали? по мне, так проще отправить к ним флот нато и убедить перейти на нормальный алфавит, чем сотням миллионов пользователей качать эту гадость.
P.S. Специально зашел на сайт проекта и посмотрел что в этой библиотеке такое тяжелое:
всякие китайские кодировки типа Simplified Chinese (GB18030) (533 Kb), корейские (штук 8 кодировок по 150 Кб каждая, куда им столько??), Break Iterators для языка кхмеров на 832 Кб неужели на нем еще кто-то разговаривает?), Thai word break rules (244 Кб), Collators для китайского и корейского, и еще всякий хлам по мелочи. В Китай, конечно, флот НАТО не отправишь, это печально, но как минимум вынести весь этот треш в отдельную библиотеку для восточных пользователей вполне можно было, ибо 99% людей это не нужно. Грустно становится за сегодняшнее поколение разработчиков из IBM.
-14
> Зачем ради всяких недогосударств, которые не могут перейти на нормальную письменность
Country, Population, GDP
China, 1336M, $10.1T
Russia, 139M, $2.2T
South Korea, 49M, $1.46T
Thailand, 67M, $0.59T
Country, Population, GDP
China, 1336M, $10.1T
Russia, 139M, $2.2T
South Korea, 49M, $1.46T
Thailand, 67M, $0.59T
+13
Вообще-то в ICU как раз все гибко настраивается. Хотите оставить 2 кодировки? Да не вопрос. Перекомпиляция не особо долгая (минут 15).
Собирал ее раз 5 в разных конфигурациях на разных системах. Надежная штука.
И да, про 11 мб в частности: библиотека весит 800 кб + отдельно db файл с кучей таблиц (которые как я написал выше можно вырезать) еще 11. Но так как никто не читает мануал, а в стандартной поставке она в виде одной длл (портабельнее) — то и получается такая говно-длл на 11 мб.
Мораль: не стоит судить хороший инструмент по его некорректному исопльзованию.
Собирал ее раз 5 в разных конфигурациях на разных системах. Надежная штука.
И да, про 11 мб в частности: библиотека весит 800 кб + отдельно db файл с кучей таблиц (которые как я написал выше можно вырезать) еще 11. Но так как никто не читает мануал, а в стандартной поставке она в виде одной длл (портабельнее) — то и получается такая говно-длл на 11 мб.
Мораль: не стоит судить хороший инструмент по его некорректному исопльзованию.
+7
Вот как раз для браузеров имеет смысл ставить все локали. Тот же Chrome используется везде фактически. Не очень хорошо требовать от пользователя выбирать дистрибутив в зависимости от нужных ему языков.
+1
На сайт заглядывали, а то, что библиотека, в первую очередь, для Unicode (о чём недвусмысленно намекает её название) — посмотреть поленились. Да, и с точки зрения многих людей, и моей в том числе, иероглифы — вполне нормальная письменность.
+1
И кстати она НЕ от IBM. Она начала разрабатываться ими (в 95 году), но это уже давно свободное сообщество. С таким же успехом давайте скажем, что LibreOffice разрабатывается Oracle.
+1
Не понял, как из 5 часов, с ускорением в 3.6 раза получилось 10 минут?
Другой вопрос, учитывая, что это бэкап, нельзя ли его сразу делать инкрементальным, т.е. проскипать все сообщения до определённой даты, не получится быстрее?
Другой вопрос, учитывая, что это бэкап, нельзя ли его сразу делать инкрементальным, т.е. проскипать все сообщения до определённой даты, не получится быстрее?
+2
5 часов это прикидки (!), причем по числу уже экспортированных чатов, а не мессаг. А там очень неравномерное распределение. Конечная цифра могла быть сильно другая, но я не дождался. 3.6 раза в свою очередь это ускорение на небольшом подмножестве работы, менее 1.5% чатов и менее 0.5% мессаг.
Те. если дождаться конца работы исходной версии на полных данных, коэффициент скорее всего будет другой.
Инкрементально делать сложнее, интерфейс не способствует. Плюс сама идея городить инкрементальные бэкапы для 30 мб текста из 200 мб базы меня коробит, на таких объемах полный экспорт обязан длиться разумное время.
Те. если дождаться конца работы исходной версии на полных данных, коэффициент скорее всего будет другой.
Инкрементально делать сложнее, интерфейс не способствует. Плюс сама идея городить инкрементальные бэкапы для 30 мб текста из 200 мб базы меня коробит, на таких объемах полный экспорт обязан длиться разумное время.
+2
НЛО прилетело и опубликовало эту надпись здесь
интересно, а при первом прогоне в профайлере можно было увидеть, что всех больше отъела времени именно LCMapStringW?
0
Я конечно все понимаю штука безусловно полезная, но что бы библиотека стоила как low-end автомобиль это лихо www.microsoftstore.com/store/msstore/en_US/pd/productID.216531800/search.true (версия поддерживающая 64-х битные приложения и коммерческое использвоание, которых сейчас развелось пруд пруди).
0
Спасибо за статью.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Обходим чужие тормоза