|
3D-программирование Вопросы, касающиеся программирования 3D мира |
06.10.2006, 06:31
|
#1
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Dim vs Type
Вот решил сравнить скорость массива и списка (это я так Type называть буду).
Вот рабочий код програмки-сравнялки, предупреждаю сразу:
1) Отключить debug mode. Ибо в противном случае процесс может и затянуться.
2) Проверить размер свободной оперативы (140 метров надо). Ибо в противном случае пример будет тестить лишь винт (pagefile), что не является тем ради чего он писался.
; dim vs type
Graphics 640,480,16,2
font=LoadFont("courier new cyr",16,1)
SetFont font
Print "================================================= ============================"
Print "убедитесь что у вас свободной оперативы более 140 МБ"
Print "иначе этот тест будет тестить ваш жесткий диск (pagefile)"
Print " да у меня более 40 своболных метров и я нажму 1:"
g=Input("1- продолжить; не 1 закончить; =>" )
If g<>1 Then End
SeedRnd MilliSecs()
Type typ
Field value
End Type
Print "================================================= ============================"
Print " Dim vs Type"
Print "================================================= ============================"
mem=AvailPhysicalRAM()
a=MilliSecs()
Dim test(5000000)
For i=1 To 5000000
test(i)=Rnd(5000)
Next
dim_create=MilliSecs()-a
dim_mem=mem-AvailPhysicalRAM()
Print "Заполнение массива:"+Str(dim_create)
mem=AvailPhysicalRAM()
a=MilliSecs()
For i=1 To 5000000
t.typ=New typ
t\value=Rnd(5000)
Next
type_create=MilliSecs()-a
type_mem=mem-AvailPhysicalRAM()
Print "Заполнение списка:"+Str(type_create)
Print "================================================= ============================"
Print "памяти под массивом :"+dim_mem Shr 20 +" MB"
Print "памяти под списком :"+type_mem Shr 20 + " MB"
Print "================================================= ============================"
el=Rnd(5000)
find_dim=0
find_type=0
Print " поиск элемента :"+Str(el)
a=MilliSecs()
For i=1 To 5000000
If el=test(i) Then find_dim=find_dim+1
Next
dim_create=MilliSecs()-a
Print "Поиск в массиве:"+Str(dim_create) +", найдено:"+Str(find_dim)
a=MilliSecs()
For t.typ=Each typ
If t\value=el Then find_type=find_type+1
Next
type_create=MilliSecs()-a
Print "Поиск в списке:"+Str(type_create)+ ", найдено:"+Str(find_type)
Print "================================================= ============================"
a=MilliSecs()
Dim test(0)
dim_destroy=MilliSecs()-a
Print "Уничтожение массива:"+Str(dim_destroy)
a=MilliSecs()
Delete Each typ
dim_destroy=MilliSecs()-a
Print "Уничтожение списка:"+Str(dim_destroy)
Print "================================================= ============================"
a=MilliSecs()
Dim test(5000000)
dim_destroy=MilliSecs()-a
Print "Обнуление массива:"+Str(dim_destroy)
For i=1 To 5000000
t.typ=New typ
t\value=Rnd(5000)
Next
a=MilliSecs()
For t.typ=Each typ
t\value=0
Next
dim_destroy=MilliSecs()-a
Print "Обнуление списка:"+Str(dim_destroy)
Print "================================================= ============================"
Print "Нажми любую клавишу для выхода. PS: Сначало запомни результат"
Print "================================================= ============================"
WaitKey()
|
(Offline)
|
|
06.10.2006, 06:38
|
#2
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Dim vs Type
Тьфу, забыл. еще нужна либа: cpuspeed.
Если у вас ее нет то надо затереть все строчки где есть это:
AvailPhysicalRAM()
PS. Если-б я знал как приаттачивать файлы, е б ее приаттачил. а так можете поискать здесь: stormclub.net
|
(Offline)
|
|
06.10.2006, 08:39
|
#3
|
|
Re: Dim vs Type
а результаты можеж выложить ?
приатачить можно в расширеным режиме
там кнопка "управление вложеными файлами"
|
|
|
06.10.2006, 13:26
|
#4
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Re: Dim vs Type
Еще один велосипед
__________________
|
(Offline)
|
|
06.10.2006, 23:35
|
#5
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Dim vs Type
Сообщение от jimon
а результаты можеж выложить ?
|
могу. в мс.
это все на celerone 433 с отключенным debug mode ессено
1463 - заполнение массива
3817 - заполнение списка
19 MB - под массивом
106 MB -под списком
275 - поиск в массиве
1816 - поиск в списке
20 - уничтожение массива
2441 - уничтожение списка
161 - обнуление массива
1782 - обнуление списка.
вот cpuspeed (либа)
Вложение 1860
насчет велосипедов. заниматься таким неблагородным делом конечно обидно, НО я нигде раньше не видел такого. так что уж извините.
|
(Offline)
|
|
06.10.2006, 23:45
|
#6
|
|
Re: Dim vs Type
довольно прогнозируемый результат
|
|
|
07.10.2006, 08:56
|
#7
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Re: Dim vs Type
Результат результатом, но что он дает? От типов отказываться в более или менее нормальном проекте нельзя. Если цель теста - привлечь внимание к массивам, то и так было ясно, что они работают быстрее. В программах используются как массивы, так и типы, просто нужно понимать, что последними не следует злоупотреблять. Но они обеспечивают намного более удобную работу с однотипными элементами, у которых может быть больше одного свойства.
Для полноты теста можно было в сравнение добавить массив типов.
|
(Offline)
|
|
07.10.2006, 17:15
|
#8
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Dim vs Type
275 - поиск в массиве
1816 - поиск в списке
|
Что-то мне подсказывает, что бинарными деревьями там и не пахнет.
А так - при желании можно и не такой кож наваять )
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
07.10.2006, 17:17
|
#9
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Dim vs Type
For i=1 To 5000000
t.typ=New typ
t\value=Rnd(5000)
Next
|
ЭТО не заполненение спика, это его инициализация и заполнение.
Большая разница, дальше даже смотреть не хочется
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
08.10.2006, 01:14
|
#10
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Dim vs Type
угу, надо заменить слово заполнение на слово инициализация, поскольку массив также инициализируется.
|
(Offline)
|
|
08.10.2006, 01:58
|
#11
|
Бывалый
Регистрация: 22.09.2005
Сообщений: 634
Написано 36 полезных сообщений (для 102 пользователей)
|
Re: Dim vs Type
ГЫ, ну ты даёшь ))
Какой смысл их сравнивать? Да ещё в таких тестах...
Начнём с того, что создание массива - просто выделение куска свободной памяти, а для создания структуры - её нужно создавать поэлементно
список у меня 75метров занимал, по сути вещей он должен быть ровно в 3 раза больше массива
a=MilliSecs()
Dim test(5000000)
dim_destroy=MilliSecs()-a
Print "Обнуление массива:"+Str(dim_destroy)
|
Опять же, ты его не обнуляешь, ты его заново создаёшь, т.е. выделяешь кусок заранее свободной памяти Точно так же и с удалением: память, занятая массивом, помечается свободной(но сама она не трогается).
Рас уж так нравятся подобные тесты, то ты забыл следующие, но очень важные:
- Удаление произвольного элемента.
- Вставка нового элемента в произвольное место.
- Перемещение элемента в произвольное место.
Думаю в этих тестах перевес будет немного в другую сторону
|
(Offline)
|
|
08.10.2006, 02:07
|
#12
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Re: Dim vs Type
Не вижу смысла мерить скорость инициализации. Она не критична.
А перебор массива на моем железе обгоняет тип всего на 25%
Выигрышь фпс мизерный (основное время занимает рендер), а вот геморроя с масивами - выше крыши.
__________________
|
(Offline)
|
|
08.10.2006, 02:26
|
#13
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Dim vs Type
Сообщение от Ньюб
ГЫ, ну ты даёшь ))
Рас уж так нравятся подобные тесты, то ты забыл следующие, но очень важные:
- Удаление произвольного элемента.
- Вставка нового элемента в произвольное место.
- Перемещение элемента в произвольное место.
Думаю в этих тестах перевес будет немного в другую сторону
|
Думаю в этих тестах перевес будет нАмного в другую чторону ,
особенно если при удалении сдвигать остальные элементы
|
(Offline)
|
|
08.10.2006, 14:30
|
#14
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Dim vs Type
Спасибо, Ньюб, именно это я и хотел сказать
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:45.
|