![]() |
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() |
Re: Dim vs Type
Тьфу, забыл. еще нужна либа: cpuspeed.
Если у вас ее нет то надо затереть все строчки где есть это: AvailPhysicalRAM() PS. Если-б я знал как приаттачивать файлы, е б ее приаттачил. а так можете поискать здесь: stormclub.net |
Re: Dim vs Type
а результаты можеж выложить ?
приатачить можно в расширеным режиме там кнопка "управление вложеными файлами" |
Re: Dim vs Type
Еще один велосипед :lol:
|
Re: Dim vs Type
Вложений: 2
Цитата:
это все на celerone 433 с отключенным debug mode ессено 1463 - заполнение массива 3817 - заполнение списка 19 MB - под массивом 106 MB -под списком 275 - поиск в массиве 1816 - поиск в списке 20 - уничтожение массива 2441 - уничтожение списка 161 - обнуление массива 1782 - обнуление списка. вот cpuspeed (либа) Вложение 1860 насчет велосипедов. заниматься таким неблагородным делом конечно обидно, НО я нигде раньше не видел такого. так что уж извините. |
Re: Dim vs Type
довольно прогнозируемый результат :)
|
Re: Dim vs Type
Результат результатом, но что он дает? От типов отказываться в более или менее нормальном проекте нельзя. Если цель теста - привлечь внимание к массивам, то и так было ясно, что они работают быстрее. В программах используются как массивы, так и типы, просто нужно понимать, что последними не следует злоупотреблять. Но они обеспечивают намного более удобную работу с однотипными элементами, у которых может быть больше одного свойства.
Для полноты теста можно было в сравнение добавить массив типов. |
Re: Dim vs Type
Цитата:
А так - при желании можно и не такой кож наваять ) |
Re: Dim vs Type
Цитата:
Большая разница, дальше даже смотреть не хочется |
Re: Dim vs Type
угу, надо заменить слово заполнение на слово инициализация, поскольку массив также инициализируется.
|
Re: Dim vs Type
ГЫ, ну ты даёшь :)))
Какой смысл их сравнивать? Да ещё в таких тестах... Начнём с того, что создание массива - просто выделение куска свободной памяти, а для создания структуры - её нужно создавать поэлементно ;) список у меня 75метров занимал, по сути вещей он должен быть ровно в 3 раза больше массива ;) Цитата:
Рас уж так нравятся подобные тесты, то ты забыл следующие, но очень важные: - Удаление произвольного элемента. - Вставка нового элемента в произвольное место. - Перемещение элемента в произвольное место. Думаю в этих тестах перевес будет немного в другую сторону ;) |
Re: Dim vs Type
Не вижу смысла мерить скорость инициализации. Она не критична.
А перебор массива на моем железе обгоняет тип всего на 25% Выигрышь фпс мизерный (основное время занимает рендер), а вот геморроя с масивами - выше крыши. |
Re: Dim vs Type
Цитата:
особенно если при удалении сдвигать остальные элементы:) |
Re: Dim vs Type
Спасибо, Ньюб, именно это я и хотел сказать
|
Часовой пояс GMT +4, время: 22:53. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot