Показать сообщение отдельно
Старый 09.07.2012, 06:19   #4
Crayzi
ПроЭктировщик
 
Регистрация: 26.06.2007
Сообщений: 194
Написано 21 полезных сообщений
(для 25 пользователей)
Ответ: Type Blitz, c++ и даже c#, Оо

Я тут коекакой эксперимент провел, ато очень интересно стало коечто, думаю тема какрас то что надо.
Global TestMassiv%[10000],Tmp1%,Tmp2%,Tmp3%,bnkTest
For tm%=0 To 10000
	TestMassiv[tm%]=tm%
Next
Dim TestMassiv2(10000)
For tm%=0 To 10000
	TestMassiv2(tm%)=tm%
Next

Global ttm%[3]
Type test
	Field ID%
;	Field RandNum%
End Type
For tm%=0 To 10000
	tt.test = New test
	tt\ID%=tm%
;	tt\RandNum=Rand(1,10000)
	If tm%=500 Then ttm[1]=Handle tt
	If tm%=5000 Then ttm[2]=Handle tt
	If tm%=10000 Then ttm[3]=Handle tt
Next

bnkTest=CreateBank(20002) 

For tm%=0 To 10000
	PokeInt bnkTest,(tm%*2),tm%
Next


Repeat
	If KeyHit(2) Then Test1()
	If KeyHit(3) Then Test2()
	If KeyHit(4) Then Test3()
	If KeyHit(5) Then Test4()
	If KeyHit(6) Then Test5()
	Delay 1
	If KeyHit(1)
		FreeBank bnkTest
		End
	EndIf
Forever


Function Test1()
	Local time%
	time%=MilliSecs()
	For tm%=0 To 1000000
		Tmp1%=TestMassiv[500]
		Tmp2%=TestMassiv[5000]
		Tmp3%=TestMassiv[10000]
	Next
	time%=MilliSecs()-time%
	Print time%
End Function

Function Test2()
	Local time%
	time%=MilliSecs()
	For tm%=0 To 1000000
		Tmp1%=TestMassiv2(500)
		Tmp2%=TestMassiv2(5000)
		Tmp3%=TestMassiv2(10000)
	Next
	time%=MilliSecs()-time%
	Print time%
End Function

Function Test3()
	Local time%
	time%=MilliSecs()
	For tm%=0 To 1000000
		p.test=Object.test(ttm[1])
		Tmp1%=p\ID%
		p.test=Object.test(ttm[2])
		Tmp2%=p\ID%
		p.test=Object.test(ttm[3])
		Tmp3%=p\ID%
	Next
	time%=MilliSecs()-time%
	Print time%
End Function

Function Test4(); на 2 нолика меньше, ибо очень тупит)))
	Local time%
	time%=MilliSecs()
	For tm%=0 To 10000
		For p.test = Each test
			If p\ID%=500
				Tmp1%=p\ID%
			EndIf
			If p\ID%=5000
				Tmp2%=p\ID%
			EndIf
			If p\ID%=10000
				Tmp3%=p\ID%
			EndIf
		Next
	Next
	time%=MilliSecs()-time%
	Print time%
End Function

Function Test5()
	Local time%
	time%=MilliSecs()
	For tm%=0 To 1000000
		Tmp1%=PeekInt(bnkTest,1000)
		Tmp2%=PeekInt(bnkTest,10000)
		Tmp3%=PeekInt(bnkTest,19998) 
	Next
	time%=MilliSecs()-time%
	Print time%
End Function
Витоге вышло
Test1 - 7 мс - массив с квадратными скобками
Test2 - 7 мс - массив с круглыми скобками
Test3 - 77 мс - обращение к конкретным типам через object
Test4 - 1800 мс (притом что во 100 раз меньше повторов сделал, но имхо думаю невыгодный способ при большом количестве данных) - перечисление типов.....
Test5 - 22 мс - чтение с определенных мест банка
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
burovalex (21.07.2012)