forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Dim vs Type (http://forum.boolean.name/showthread.php?t=1644)

HolyDel 06.10.2006 06:31

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()

HolyDel 06.10.2006 06:38

Re: Dim vs Type
 
Тьфу, забыл. еще нужна либа: cpuspeed.
Если у вас ее нет то надо затереть все строчки где есть это:
AvailPhysicalRAM()

PS. Если-б я знал как приаттачивать файлы, е б ее приаттачил. а так можете поискать здесь: stormclub.net

jimon 06.10.2006 08:39

Re: Dim vs Type
 
а результаты можеж выложить ?
приатачить можно в расширеным режиме
там кнопка "управление вложеными файлами"

tormoz 06.10.2006 13:26

Re: Dim vs Type
 
Еще один велосипед :lol:

HolyDel 06.10.2006 23:35

Re: Dim vs Type
 
Вложений: 2
Цитата:

Сообщение от jimon
а результаты можеж выложить ?

могу. в мс.
это все на celerone 433 с отключенным debug mode ессено
1463 - заполнение массива
3817 - заполнение списка
19 MB - под массивом
106 MB -под списком
275 - поиск в массиве
1816 - поиск в списке
20 - уничтожение массива
2441 - уничтожение списка
161 - обнуление массива
1782 - обнуление списка.

вот cpuspeed (либа)
Вложение 1860

насчет велосипедов. заниматься таким неблагородным делом конечно обидно, НО я нигде раньше не видел такого. так что уж извините.

jimon 06.10.2006 23:45

Re: Dim vs Type
 
довольно прогнозируемый результат :)

alcoSHoLiK 07.10.2006 08:56

Re: Dim vs Type
 
Результат результатом, но что он дает? От типов отказываться в более или менее нормальном проекте нельзя. Если цель теста - привлечь внимание к массивам, то и так было ясно, что они работают быстрее. В программах используются как массивы, так и типы, просто нужно понимать, что последними не следует злоупотреблять. Но они обеспечивают намного более удобную работу с однотипными элементами, у которых может быть больше одного свойства.

Для полноты теста можно было в сравнение добавить массив типов.

impersonalis 07.10.2006 17:15

Re: Dim vs Type
 
Цитата:

275 - поиск в массиве
1816 - поиск в списке
Что-то мне подсказывает, что бинарными деревьями там и не пахнет.
А так - при желании можно и не такой кож наваять )

impersonalis 07.10.2006 17:17

Re: Dim vs Type
 
Цитата:

For i=1 To 5000000
t.typ=New typ
t\value=Rnd(5000)
Next
ЭТО не заполненение спика, это его инициализация и заполнение.
Большая разница, дальше даже смотреть не хочется

HolyDel 08.10.2006 01:14

Re: Dim vs Type
 
угу, надо заменить слово заполнение на слово инициализация, поскольку массив также инициализируется.

НУБ 08.10.2006 01:58

Re: Dim vs Type
 
ГЫ, ну ты даёшь :)))
Какой смысл их сравнивать? Да ещё в таких тестах...

Начнём с того, что создание массива - просто выделение куска свободной памяти, а для создания структуры - её нужно создавать поэлементно ;)

список у меня 75метров занимал, по сути вещей он должен быть ровно в 3 раза больше массива ;)

Цитата:

a=MilliSecs()
Dim test(5000000)
dim_destroy=MilliSecs()-a
Print "Обнуление массива:"+Str(dim_destroy)
Опять же, ты его не обнуляешь, ты его заново создаёшь, т.е. выделяешь кусок заранее свободной памяти ;) Точно так же и с удалением: память, занятая массивом, помечается свободной(но сама она не трогается).

Рас уж так нравятся подобные тесты, то ты забыл следующие, но очень важные:
- Удаление произвольного элемента.
- Вставка нового элемента в произвольное место.
- Перемещение элемента в произвольное место.
Думаю в этих тестах перевес будет немного в другую сторону ;)

tormoz 08.10.2006 02:07

Re: Dim vs Type
 
Не вижу смысла мерить скорость инициализации. Она не критична.
А перебор массива на моем железе обгоняет тип всего на 25%
Выигрышь фпс мизерный (основное время занимает рендер), а вот геморроя с масивами - выше крыши.

HolyDel 08.10.2006 02:26

Re: Dim vs Type
 
Цитата:

Сообщение от Ньюб
ГЫ, ну ты даёшь :)))
Рас уж так нравятся подобные тесты, то ты забыл следующие, но очень важные:
- Удаление произвольного элемента.
- Вставка нового элемента в произвольное место.
- Перемещение элемента в произвольное место.
Думаю в этих тестах перевес будет немного в другую сторону ;)

Думаю в этих тестах перевес будет нАмного в другую чторону :),
особенно если при удалении сдвигать остальные элементы:)

impersonalis 08.10.2006 14:30

Re: Dim vs Type
 
Спасибо, Ньюб, именно это я и хотел сказать


Часовой пояс GMT +4, время: 22:53.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot