Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: Type или Class??? Добавлено: 14.08.04 11:54  

Автор вопроса:  AgentFire | ICQ: 192496851 
Я пишу игру.
Имеестя корабль с кучей свойств, но без методов и событий.
Что было бы быстрее использовать(производительность) — Type или Class?..

Ответить

  Ответы Всего ответов: 33  

Номер ответа: 1
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #1
Добавлено: 14.08.04 12:54
 Ну так погоняй их в цикле. Засеки время начала и конца цикла и сравни их.
 Вот так:
 ;Dim t1 as Single, t2 as Single
 t1=Timer
 'Цикл
 t2=Timer
 Msgbox t2-t1

Ответить

Номер ответа: 2
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #2
Добавлено: 14.08.04 15:49
Разве так важна производительность? По принципу бритвы Оккама, раз нет методов и событий, использовать class нерационально.

Ответить

Номер ответа: 3
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #3
Добавлено: 14.08.04 16:08
А в VB6 где хранится Type, а где Class?

Насколько я знаю, в .Net структуры хранятся в стеке и при передаче,
допустим, в функцию, копируется в памяти.
А классы хранятся в куче, данные не копируются, а передается лишь
ссылка...
А поэтому при большом объеме данных производительнее использовать
классы.

Ответить

Номер ответа: 4
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #4
Добавлено: 14.08.04 16:47
Хранить структуры в стеке? Какой ужас! Надеюсь, это только в .NET, чтобы приучать к ООП. В Си, по крайней мере, классы и структуры сделаны максимально похожими, за тем исключением, что структуры нельзя наследовать.
-------------------------------------------------
"Долгое время считалось, что в непредсказуемых поворотах лестниц Первертса зашифровано послание великих колдунов прошлого. Десятки ученых магов потратили не одну сотню лет жизни, пытаясь разгадать тайный смысл лестничных маневров, пока кто-то не догадался, что лестницы просто валяют дурака"
Порри Гаттер, часть 3

Ответить

Номер ответа: 5
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #5
Добавлено: 14.08.04 19:50
 Ну не факт что куча быстрее.
 Стёк для процессора родной. У него даже для него специальные операторы(PUSH/POP и т.д.) и регистры (EBP, ESP) имеются. Причём все адреса расчитываются компилятором и хранятся в экзешнике. Т.е. прога сама заранее знает где у неё какая структура лежать будет.
 А при работе с кучей нужно сначала получить указатель на участок памяти (для этого требуется API-функция, которая отнимает время). Да и использовать его можно преимущественно в API-функциях, которые выполняются гораздо медленнее непосредственной работы процессора со стеком.

Ответить

Номер ответа: 6
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #6
Добавлено: 14.08.04 20:33
Имхо, помещение указателя на класс в тек происходит быстрее, чем копирование структуры в верхушку стека, а оперирование классом и структурой, если не принимать во внимание сложность класса, происходит примерно одинаково быстро. Не забывай, что стек - это та же память, что и куча и "родной" он только на уровне удобства.

-------------------------------------------------
"Да-да, в ночь на 1 мая крышу Первертса срывало - иногда вместе с факультетскими башнями - и носило по миру."
Порри Гаттер, часть 3

Ответить

Номер ответа: 7
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #7
Добавлено: 14.08.04 21:50
При небольших размерах структуры (Эплман говорил вроде, что до 80
байт, может врет) затраты на выделение памяти в куче больше чем
затраты не копирование структуры в стеке.

Ответить

Номер ответа: 8
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #8
Добавлено: 14.08.04 22:33
Ну 80 байт это не небольшая структура...

-------------------------------------------------
"К сожалению, точные и мощные удары бывшего спецназовца не улучшили ситуацию. Гипергорох реагировал на атаки по методу Лернейской гидры: место срубленного побега тут же занимали два новых. Секундой позже к борьбе с зеленой стихией присоединились Порри, который с криком Огнемет-бы-сюда! поджег часть ветвей (а также меню на завтра), и Гаргантюа, вопящий иссушающие заклинания Каракумус, Кызылкумус и Понедельник-утрос, многократно усиленные влиянием Вальпургиевой ночи."
Порри Гаттер, часть 3

Ответить

Номер ответа: 9
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #9
Добавлено: 14.08.04 22:39
>Не забывай, что стек - это та же память, что и куча и "родной" он только на уровне удобства.
 
 Родной он как раз для процессора, т.к. команды работы со стеком в процессор зашиты. И если для стека команды процессор выполлняет непосредственно, то для кучи алгоритм мне не известен. Но то что процессор не поддерживает комманд работы с кучей - это точно.

Ответить

Номер ответа: 10
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #10
Добавлено: 14.08.04 22:48
> Родной он как раз для процессора
> "родной" он только на уровне удобства
Это всего лишь сокращение от mov [esp],arg:sub esp,sizeof arg. А работа с памятью еще "глубже" "зашита" в процессор :) И алгоритм там простейший: адрес кучи + оффсет.

Ответить

Номер ответа: 11
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #11
Добавлено: 15.08.04 00:42
>И алгоритм там простейший: адрес кучи + оффсет.
 Ага, а получаешь ты их с помощью API. Если стековые адреса считает компилятор, то адрес памяти из кучи считает система. Значит в первом случае будет быстрее в рантайме.
 Ты помнишь какую нибудь API работы со стеком? Нет потому что это уже есть в процессоре. А API работы с кучей? Вот то то. Даже если эта API состоит из одного NOP'а (в чём я сильно сомневаюсь, тем более в .NET), то все равно на её вызов потребуется время, зависящее от загруженности системы.

Ответить

Номер ответа: 12
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #12
Добавлено: 15.08.04 00:49
Ну дык указатель на кучу возвращается при выделении памяти в ней, т.е. API используется в самом начале. А оффсеты, если классы не виртуальные, также зашиты компилером в ехешник. Вот если есть late binding, тогда приходится все делать через ж... VTable. После получения этого указателя тебе больше не нужны будут никакие API.

-------------------------------------------------
"Зачем же эгоистичный волшебный кот полетел с авантюристкой, спросит читатель, у которого дома не живут коты. Он же мог в любой момент перенестись в безопасное место. Что его удерживало? Доброта? Самоотверженность? Желание помочь людям? Читатель, у которого дома есть коты, уже саркастически усмехается. Остальных придется разочаровать. Кисера удерживала на верблюжьем горбе обыкновенная лень."
Порри Гаттер, часть 3 (www.gatter.ru)

Ответить

Номер ответа: 13
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #13
Добавлено: 15.08.04 00:58
>Ну дык указатель на кучу возвращается при выделении памяти в ней, т.е. API используется в самом начале.
 Сколько кусков памяти выделишь, столько и будет API вызываться. Тем более что для работы с кучей существует вовсе не единственная функция. Посчитай их ради интереса в разделе "Memory Management Functions" MSDN.

Ответить

Номер ответа: 14
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #14
Добавлено: 15.08.04 01:11
Думаю, что в случае с классами куча только выделяется HeapAlloc и освобождается HeapFree. И вполне возможно, что для всех экземпляров объектов с одной областью видимости она выделяется только один раз.

Ответить

Номер ответа: 15
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #15
Добавлено: 15.08.04 01:20
 Я думаю что для уточнения лучше посмотреть это дело под дизассемблером.

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам