Страница: 1 | 2 |
Вопрос: ассемблер и .net
Добавлено: 20.10.05 16:20
Автор вопроса: Вячеслав
Есть программа на Vb.net 2003.
Переписал ее на VC++. Что-то там оптимизировал в настройках, но работает в несколько раз медленнее.
Вопрос такой:
Так как я привык к Vb.net, можно ли не используя С++ оптимизировать на ассемблерном уровне программу Vb.net.
Программка маленькая (несколько кб) и есть один ответственный участок по скорости (цикл в цикле и сравнение)
Как подступиться? Возможно ли какой нибудь программой залезть в Exe-шник, найти этот кусок (думаю, что найду) и подправить его руками?
Я так понимаю, .net не компилирует "настоящий" exe-шник, есть ли утилиты, которые делают настоящий exe-шник (ngen.exe ?), на который можно натравиться дизассемблерами?
Ответы
Всего ответов: 16
Номер ответа: 1
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #1
Добавлено: 20.10.05 18:24
.NET не компилирует настоящий экзешник. Настоящий экзешник компилирует JIT потом.
Но всё равно, не надо так делать.
Номер ответа: 2
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #2
Добавлено: 21.10.05 00:13
Вынеси критичный участок в DLL на ассемблере
Номер ответа: 3
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #3
Добавлено: 21.10.05 08:52
Если на С++ получилось медленнее - значит что-то не так делал. Должно быть наоборот значительно быстрее. Какие опции компилятору выставлял? Попробуй cl /O2 mysource.cpp
А вообще если программа несколько килобайт, то проще целиком на ассемблере написать её.
Номер ответа: 4
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #4
Добавлено: 22.10.05 05:14
Ты чё не слыхал про новые суперкомпиляторы от Микрософт? А вдруг он тебе прогу под P4 на одних SSE2 слабает?
Номер ответа: 5
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #5
Добавлено: 22.10.05 14:09
дык то что .net быстрее любой 6-ой версии, хоть с++ хоть vb... вроде не для кого не новость, .net примерно в 2 раза быстрее, и пофиг какой язык. Разве что асм щас может соревноваться с .net'om. Попробуй использовать dll, т.е. напиши этот участок на асме или на том же .net'e скомпилируй dll и используй её в vc++
Номер ответа: 6
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #6
Добавлено: 23.10.05 02:34
Чтобы откомпилировать приложение для .NET, компиляторы берут исходный код и создают из него MSIL-код.
MSIL — это полноценный язык(похож на ассемблер), пригодный для написания приложений. Однако, как и в случае с ассемблером, исполььзовать его рекомендовано в особых обстоятельствах.
Для работы с ним есть утилита - ILDASM(входит в стандартный кмплект поставки).
HACKER - ты уж так людей не пугай Может ты рекламным агентом MS подоабатываешь
Реально "стандартный" без использования встроенных методов, например те же циклы) код работает примерно раз в 10 медленнее аналогичного на С++. Высокое бытродействие достигается виртузной отработкой всех методов библиотеки .NET. В таких случаях программа может приблизиться в некоторых случаях к аналогичной на С++(и даже быть быстрее).
Вячеслав.
Что у тебя внутри циклов считается?
Если можно выложи этот кусочек на VB.NET и С++.
Номер ответа: 7
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #7
Добавлено: 23.10.05 04:41
Скорее это единый для всех стандарт промежуточного представления программы.
Благодаря этому и получается возможность декомпиляции и трансляции из одного .NET языка в другой. Просто взяли какой то один из способов и сделали его стандартом, ничего волшебного.
Номер ответа: 8
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #8
Добавлено: 23.10.05 04:46
Вообще логично было бы предположить что VC++7 оптимизирует лучше чем VC++6, а не наоборот. Насчёт остальных не знаю.
Номер ответа: 9
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #9
Добавлено: 23.10.05 14:23
Номер ответа: 10
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #10
Добавлено: 23.10.05 16:49
да? хм... ну небуду упёртым, я таких и сам людей не люблю, ну дык тогда растолкуйте в чём не прав. .Net это ж походу вообще новая архитектура приложения...
Номер ответа: 11
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #11
Добавлено: 23.10.05 19:52
У .NET интерпретируемый байт-код, он в принципе не может выполняться хотя бы примерно на том же уровне скорости, что и native
Номер ответа: 12
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #12
Добавлено: 23.10.05 20:38
Это увы не все. После первого прохода он компилируется в родной.
Но не даром он назван еще и управляемым. Среда исполнения контролирует ход работы программы. К примеру приятный сервис -автоматическая сборка мусора.
Но если покороче, то помимо интерпритации мы имеем еше сразу два потока(один программы - один среды).Причем второй всячески исследует нашу программу на предмет правильнсти действий. Вот тут мы в производительности особенно теряем.
Но взамен получаем массу приятных и нужных возможностей
Номер ответа: 13
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #13
Добавлено: 24.10.05 00:48
ну короче всё понятно
Номер ответа: 14
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #14
Добавлено: 24.10.05 04:30
... Но взамен получаем массу приятных и нужных возможностей
Ктож спорит. Интерпретатор именно тем и хорош, что предоставляет удобства, недостижимые компилятору.
М чего это тебе так от него приятно? К чему это ты там его прислоняешь?
Номер ответа: 15
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #15
Добавлено: 24.10.05 09:14
М... Ага, тоже тащишся