![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Kronos |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 14.9.2002 Где: Млечный Путь Репутация: нет Всего: нет |
Где то (сейчас уже не припомню где) наткнулся на утверждение, что использование unsafe блоков связано с накладными расходами при переходе в такой блок и выходе из него.
Потом специально искал подробности об этом но так и не нашел. Может их этих расходов нет вообще? Потому спрашиваю здесь. Если есть спецы, которые знают подробности поясните. Есть ли такие накладные расходы. Откуда берутся. В первую очередь интересует падение производительности. Как классический пример, насколько плохо переходить в unsafe и выходить оттуда много раз подряд в цикле. |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 9 Всего: 172 |
По идее да, если ансейф блок ничего не делает, то его вызов будет немного менее выгодным.
Если же ансейф что-то делает, до он будет быстрее. -------------------- |
|||
|
||||
Kronos |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 14.9.2002 Где: Млечный Путь Репутация: нет Всего: нет |
Код
Попробовал я такой код. Меняя несколько варианты содержимого функций и их вызов уже из контекста unsafe блока и из обычного контекста. У меня странные результаты. Во первых затраченное время меняется незначительно (даже если в функции добавить еще несколько арифметических опреаций. Во вторых в одних сборках чуть быстрее unsafe, в других safe. Вообще закономерностей не заметил. Есть еще предположение о работе оптимизатора, который портит нам логику работы (или нет?). |
||||
|
|||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 9 Всего: 172 |
Ну да, по идее компилятор или JIT может вообще выбросить пустые методы или инлайнить код. Хотя у меня вроде этого не делалось, т.к. стабильно ансейф был немного медленнее. -------------------- |
|||
|
||||
Guest |
|
|||
Unregistered |
Я компилировал из командной строки. csc t.txt /unsafe Уж не знаю что там по умолчанию. Чтобы исключить затраты на компиляцию во время исполнения добавил еще один вызов DoTest();. Кроме того попробовал сам DoTest объявить unsafe и (или) вызывать DoTest так. unsafe { test.DoTest(); } Всегда время было 0.375 или 0.39... (точно не помню). От случая к случаю эти два числа вроде случайно менялись. Возможно затраты на вызов функции просто так велики, что содержимое простых функций вообще практически незаметно и safe или unsafe тоже. Короче надо исследовать этот вопрос. Попробую еще варианты. |
|||
|
||||
Kronos |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 14.9.2002 Где: Млечный Путь Репутация: нет Всего: нет |
В обще вроде никаких значимых расходов на переход в unsafe нет. Для простейших функций разница в нескольког процентов времени исполнения. Варьируется от сборки к сборке. Причем явных закономерностей, что будет быстрее не выявлено. Часто второй проход по идентичному циклу занимает даже чуть большее время, что тоже странно.
Но меня терзают смутные сомнения. Если в функции, объявленной как unsafe, не используется никаких возможностей unsafe, то вдруг компилятор просто удаляет такие блоки unsafe и трактует их как обычные? |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |