Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D

Ответ
 
Опции темы
Старый 02.05.2012, 05:50   #1
radiobutton
Бывалый
 
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений
(для 546 пользователей)
Type Blitz, c++ и даже c#, Оо



Где то читал, что type в блитз это тоже самое что struct в с++.

Обсуждаем?
(Offline)
 
Ответить с цитированием
Старый 02.05.2012, 11:13   #2
ffinder
Дэвелопер
 
Аватар для ffinder
 
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений
(для 1,460 пользователей)
Ответ: Type Blitz, c++ и даже c#, Оо

а что именно ты хочешь обсудить?
в блице нету классов, нет указателей на функции, в блице type это структура в смысле Си (без плюсов) только еще добавлено автоматическое создание коллекции для хранения объектов (команды After, Before, Insert, Delete)
(Offline)
 
Ответить с цитированием
Эти 5 пользователя(ей) сказали Спасибо ffinder за это полезное сообщение:
4yBa4Ok (03.05.2012), ABTOMAT (09.07.2012), Кирпи4 (02.05.2012), Gector (02.05.2012), St_AnGer (02.05.2012)
Старый 02.05.2012, 13:02   #3
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Ответ: Type Blitz, c++ и даже c#, Оо

В пурике и то лучше.
__________________
Ибо как сказал Бгдн:
(Offline)
 
Ответить с цитированием
Старый 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)
Старый 09.07.2012, 13:01   #5
jimon
 
Сообщений: n/a
Ответ: Type Blitz, c++ и даже c#, Оо

Crayzi
Нажмите на изображение для увеличения
Название: +_2acc5a8841f8752904d37f90a8014829.png
Просмотров: 948
Размер:	89.8 Кб
ID:	17149
 
Ответить с цитированием
Старый 10.07.2012, 00:57   #6
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Type Blitz, c++ и даже c#, Оо

Скорость команд в Blitz3D
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
Alex__Noc (10.07.2012), Crayzi (19.07.2012), mauNgerS (14.07.2012)
Старый 21.07.2012, 21:41   #7
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Type Blitz, c++ и даже c#, Оо

Доработал твой пример, взялся потому что испугал меня с Type'ом, я просто таким методом пользуюсь )

Global TestMassiv%[1000000],Tmp1%,Tmp2%,Tmp3%,bnkTest
For tm%=0 To 1000000
	TestMassiv[tm%]=tm%
Next
Dim TestMassiv2(1000000)
For tm%=0 To 1000000
	TestMassiv2(tm%)=tm%
Next

Global ttm%[3]
Type test
	Field ID%	
End Type
For tm%=0 To 1000000
	tt.test = New test
	tt\ID%=tm%
	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(5000000) 

For tm%=0 To 1000000
	PokeInt bnkTest,(tm%*4),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
		;поправил массив - надо делать проверку, а не 10к раз присваивать значения
		If TestMassiv[tm]=500 Then Tmp1%=TestMassiv[tm]
		If TestMassiv[tm]=5000 Then Tmp2%=TestMassiv[tm]
		If TestMassiv[tm]=10000 Then Tmp3%=TestMassiv[tm]
	Next
	time%=MilliSecs()-time%
	Print time% + "   =   " + Tmp1 + "  " + Tmp2 + "  " + Tmp3
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% + "   =   " + Tmp1 + "  " + Tmp2 + "  " + Tmp3
End Function

Function Test3()	;Если есть handle то не вижу смысла проходить по списку, а так мне форумчане советовали его реже использовать - медленный
	Local time%
	time%=MilliSecs()
		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%
	time%=MilliSecs()-time%
	Print time% + "   =   " + Tmp1 + "  " + Tmp2 + "  " + Tmp3
End Function

Function Test4(); на 2 нолика меньше, ибо очень тупит)))
	Local time%
	time%=MilliSecs()
	;For tm%=0 To 10000		; убрал цикл т.к. 10к раз проходишь по миллионному списку 0_о
		For p.test = Each test	;он и так пройдет по нему 1000000 раз
			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% + "   =   " + Tmp1 + "  " + Tmp2 + "  " + Tmp3  	;результат требуемый
End Function

Function Test5()	;здесь тоже поправил, банк был всего на 10к байтов, как я понял проверяем на миллион )
	Local time%	
	time%=MilliSecs()
	For tm%=0 To 1000000	;и сделал проверку, чтоб всё справедливо было как в списке и массиве
		If PeekInt(bnkTest,tm)=500 Then Tmp1%=PeekInt(bnkTest,tm)
		If PeekInt(bnkTest,tm)=5000 Then Tmp2%=PeekInt(bnkTest,tm)
		If PeekInt(bnkTest,tm)=10000 Then Tmp3%=PeekInt(bnkTest,tm)
	Next
	time%=MilliSecs()-time%
	Print time% + "   =   " + Tmp1 + "  " + Tmp2 + "  " + Tmp3
End Function
В итоге вышло: (проверка на миллион записей и мой слабенький бук)

Test1 - 133 мс - массив с квадратными скобками
Test2 - 135 мс - массив с круглыми скобками
Test3 - 0 мс - обращение к конкретным типам через object (если знаешь ссылку смысла нет гонять весь список, но вообще handle самый медленный)
Test4 - 146 мс (работал дико медленно потому что for..each и так проходит по всем записям (10к) а ты его в еще один цикл засунул 10к, в итоге сделал 100 миллионов проход, задолбался ждать ))
Test5 - 208 мс - проход по всей банке проигрывает
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Crayzi (23.10.2012)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com