Тема: Dim vs Type
Показать сообщение отдельно
Старый 06.10.2006, 06:31   #1
HolyDel
 
Регистрация: 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)
 
Ответить с цитированием