XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Вопрос про структуры
Народ подскажите метод сохранения одной и той же структуры на разные объекты, чтобы не создавать и удалять структуру а вешать её на юнита\таймер\юнита и так до бесконечности...
Я слышал про TimerUtils но мне нужно и еще на самого юнита сохранить структуру, без использования хеш конструкций (как сделать с хешем я и так знаю)...
На счёт глобального массива, ну сохраню я туда структуру, а на юнита тогда придется вешать CustomValue с номером ячейки, не придумано ли способа по оптимальней...

Отредактировано quq_CCCP, 21.05.2012 в 04:58.
Старый 21.05.2012, 04:52
ScorpioT1000
Работаем
offline
Опыт: отключен
Куда уж оптимальней? Всё ты уже знаешь =) Сделай супер кастом велью, вот тут быстро xgm.ru/forum/showthread.php?t=12894 чтобы на юнита можно было вешать несколько независимых структур, но лучше хеш, конечно, если тебе не надо обратной совместимости. (мне в jc надо было и я юзал метод перебора / cv)
Старый 21.05.2012, 05:01
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
ScorpioT1000, тут я уже запутался с решениями, допустим 100 структру созадли с данными, затем повешали на юнитов, за тем на таймеры, дык еще и нужно их изменять иди удалять...
Ну хочу сбацать структуры с массивами предметов, которые могу выпасть из юнитов... а чтобы не орали типо хеш медленный, решил спросить про массивы...
Старый 21.05.2012, 05:13
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
quq_CCCP:
а чтобы не орали типо хеш медленный
То что хеш медленнее массивов не значит что он медленнее настолько что его уже нельзя использовать.
Старый 21.05.2012, 05:21
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Master_chan, эт я хнаю, но меня уже раза 4 точно облиняли что я юзаю хеш в наработках, они ведь для людей, а значит должны быть идеальны, в том числи и по производительности...
Ну сам я понимаю что визуально разницы видно не будет...
Да и кастати, как насчёт юзать уменьшенный хендл юнита как ключ к структуре?, то кастом валуюе часто юзают для других целей...
Старый 21.05.2012, 05:24
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
У нас на форуме есть особая каста людей которые сами ничего не делают, только поливают говном других.
Можешь использовать (хендл - опр. константа) как ключ, но мне кажется с хешем проще.
Старый 21.05.2012, 05:30
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
ScorpioT1000, Попробую с системой ToadCop'a, с точки зрения написания она значительно упрощает жизнь...
quq_CCCP добавил:
Лан покато спс, пусть часиков 6 будет открыта. когда выложу результаты посмотрим и закроем...
quq_CCCP добавил:
Ну собственно вот код, сделано по варианту ScorpioT1000, с использованием наработки Toadcop,
Код возрос в разы, разница в производительности с хешем заметна лиш когда вся карта забита юнитами и их одновременно убивают..
» код cистемки
((код jass
scope CreepRespawnSystem initializer InitCreps
====================================================================
private struct UnitData структуру нетронять не в коем случаи...
real CreepX
real CreepY
real CreepA
real ResTime
integer LevelOrType
boolean UseAltrnateTimer = false
endstruct
=====================================================================
globals// вот тут все настройки
boolean bj_DESTROY_CORPSE = true удалять трупы умерших крипов.
boolean bj_SHOW_DEATH_EFFECT = true показать спецэффект при смерте крипа
boolean bj_SHOW_RESPAWN_EFFECT = true показать спецэфект при респауне
boolean bj_RANDOM_CREEP_TYPE = true респаунить каждый раз разных крипов но одного и того же уровня
boolean bj_CHECK_REPAWN_POS = false// проверять видит ли игрок точку респауна, и если видит пропустить респаун
string bj_DEATH_EFFECT = "Abilities\\Spells\\Orc\\FeralSpirit\\feralspiritdone.mdl" спецэффект при смерти крипа
string bj_RESPAWN_EFFECT = "Abilities\\Spells\\Human\\Resurrect\\ResurrectTarget.mdl" спецэффект при респауне крипа
real bj_CREEP_SAVE_INTERVAL = 0.20 задержка перед работой системы... Необходимо в тех картах где создание крипов просиходит во время игры.
real bj_RESP_TIMEOUT = 1.00 время чеерез которую возродится крип... В данном случае умножвется на его уровень.
private constant player bj_PLAYER_NEUTRAL_AGGRESSIVE = Player( 12 ) Нетрально враждебный, если в вашей крате вы использует другоuо игрока то введите его номер в Player( № )
вспомогательные переменные системы
не рекомендуется их изменение
private unit bj_Neutral_Creep
private timer bj_RespawnTimer
private UnitData bj_UnitData
private location bl_TempPoint
endglobals
private function bj_creepRespTimeout takes nothing returns real задержка перед респауном крипа можно вести конкретное время или выражение
return bj_RESP_TIMEOUT * GetUnitLevel( GetDyingUnit( ) ) в данном случие врмя респауна равно уровень крипа умнноженный на bj_RESP_TIMEOUT ( 2 сек )
endfunction
private function Bolexp_UnitFiler_Conditions takes nothing returns boolean фильтр сохраннения нетрально враждебынх юнитов
return GetOwningPlayer( GetFilterUnit( ) ) == bj_PLAYER_NEUTRAL_AGGRESSIVE в данном случее проходят все юниты подконтрольные игроку bj_PLAYER_NEUTRAL_AGGRESSIVE
endfunction через and можно добавить дополнительыне критерии отбора.

далее вмешательство в код настоятельно не рекомендуется...
**************************************************************************************************​********************************************
**************************************************************************************************​********************************************

function CreateCreepOfType takes integer CreepType, real SX, real SY, real SA, real timeout returns unit
set bj_UnitData = UnitData.create( )
set bj_lastCreatedUnit = CreateUnit( bj_PLAYER_NEUTRAL_AGGRESSIVE, CreepType, SX, SY, SA )
set bj_UnitData.CreepX = SX
set bj_UnitData.CreepY = SY
set bj_UnitData.CreepA = SA
set bj_UnitData.ResTime = timeout
set bj_UnitData.UseAltrnateTimer = true

if bj_RANDOM_CREEP_TYPE then
set bj_UnitData.LevelOrType = GetUnitLevel( bj_lastCreatedUnit )
else
set bj_UnitData.LevelOrType = 3
endif

call SetDataBX( bj_lastCreatedUnit, bj_UnitData )
return bj_lastCreatedUnit
endfunction
function RemoveCreep takes unit fp_uCreep returns nothing
set bj_UnitData = GetDataBX( fp_uCreep )
call bj_UnitData.destroy( )
call RemoveDataBX( fp_uCreep )
call RemoveUnit( fp_uCreep )
set fp_uCreep = null
endfunction
private function Group_SaveCrepsPos_Actions takes nothing returns nothing
set bj_Neutral_Creep = GetEnumUnit( )
set bj_UnitData = UnitData.create( )
set bj_UnitData.CreepX = GetUnitX( bj_Neutral_Creep )
set bj_UnitData.CreepY = GetUnitY( bj_Neutral_Creep )
set bj_UnitData.CreepA = GetUnitFacing( bj_Neutral_Creep )
set bj_UnitData.ResTime = 0.00

if bj_RANDOM_CREEP_TYPE then
set bj_UnitData.LevelOrType = GetUnitLevel( bj_Neutral_Creep )
else
set bj_UnitData.LevelOrType = GetUnitTypeId( bj_Neutral_Creep )
endif

call SetDataBX( bj_Neutral_Creep, bj_UnitData )
endfunction
private function AddSpecialEffectZ takes string path, real x, real y, real z returns effect
set bl_TempPoint = Location( x, y )
set z = z + GetLocationZ( bl_TempPoint ) + 10.00
call RemoveLocation( bl_TempPoint )
set bj_lastCreatedDestructable = CreateDestructableZ( 'OTip', x, y, z, 0.00, 1, 0 )
set bj_lastCreatedEffect = AddSpecialEffect( path, x, y )
call RemoveDestructable( bj_lastCreatedDestructable )
return bj_lastCreatedEffect
endfunction


private function IsSpawnPosVisibly_Conditions takes real PX, real PY returns boolean
local integer nIndex = 0
if not bj_CHECK_REPAWN_POS then
return true
endif
loop
exitwhen nIndex > bj_MAX_PLAYER_SLOTS
if ( IsVisibleToPlayer( PX, PY, Player( nIndex ) ) ) then
return false
endif
set nIndex = nIndex + 1
endloop
return true
endfunction
private function Timer_Creep_Respawn_Actions takes nothing returns nothing
set bj_RespawnTimer = GetExpiredTimer( )
set bj_UnitData = GetDataBX( bj_RespawnTimer )

if IsSpawnPosVisibly_Conditions( bj_UnitData.CreepX, bj_UnitData.CreepY ) then
if bj_RANDOM_CREEP_TYPE then
call DisplayTextToPlayer( Player( 0 ), 0, 0, "Сработало" )
call DisplayTextToPlayer( Player( 0 ), 0, 0, I2S(bj_UnitData.LevelOrType) )
call DisplayTextToPlayer( Player( 0 ), 0, 0, R2S(bj_UnitData.CreepX) )
call DisplayTextToPlayer( Player( 0 ), 0, 0, R2S(bj_UnitData.CreepY) )
set bj_Neutral_Creep = CreateUnit( bj_PLAYER_NEUTRAL_AGGRESSIVE, ChooseRandomCreep( bj_UnitData.LevelOrType ), bj_UnitData.CreepX, bj_UnitData.CreepY, bj_UnitData.CreepA )
else
call DisplayTextToPlayer( Player( 0 ), 0, 0, "Сработало 2" )
set bj_Neutral_Creep = CreateUnit( bj_PLAYER_NEUTRAL_AGGRESSIVE, bj_UnitData.LevelOrType, bj_UnitData.CreepX, bj_UnitData.CreepY, bj_UnitData.CreepA )
endif

if bj_SHOW_RESPAWN_EFFECT then
call DestroyEffect( AddSpecialEffectTarget( bj_RESPAWN_EFFECT, bj_Neutral_Creep, "origin" ) )
endif

call SetDataBX( bj_Neutral_Creep, bj_UnitData )
call RemoveDataBX( bj_RespawnTimer )

call PauseTimer( bj_RespawnTimer )
call DestroyTimer( bj_RespawnTimer )
endif

endfunction
private function Trig_Creep_Resp_Actions takes nothing returns nothing
set bj_RespawnTimer = CreateTimer( )
set bj_Neutral_Creep = GetDyingUnit( )
set bj_UnitData = GetDataBX( bj_Neutral_Creep )

call SetDataBX( bj_RespawnTimer, bj_UnitData )
call RemoveDataBX( bj_Neutral_Creep )


if ( bj_SHOW_DEATH_EFFECT and bj_DESTROY_CORPSE and IsUnitType( bj_Neutral_Creep, UNIT_TYPE_FLYING ) ) then
call DestroyEffect( AddSpecialEffectZ( bj_DEATH_EFFECT, GetUnitX( bj_Neutral_Creep ), GetUnitY( bj_Neutral_Creep ), GetUnitFlyHeight( bj_Neutral_Creep ) ) )
elseif bj_SHOW_DEATH_EFFECT then
call DestroyEffect( AddSpecialEffect( bj_DEATH_EFFECT, GetUnitX( bj_Neutral_Creep ), GetUnitY( bj_Neutral_Creep ) ) )
endif

if ( bj_DESTROY_CORPSE ) then
call RemoveUnit( bj_Neutral_Creep )
endif

if bj_UnitData.UseAltrnateTimer then
call TimerStart( bj_RespawnTimer, bj_UnitData.ResTime, true, function Timer_Creep_Respawn_Actions )
else
call TimerStart( bj_RespawnTimer, bj_creepRespTimeout( ), true, function Timer_Creep_Respawn_Actions )
endif
endfunction

private function SaveCreepRespPos takes nothing returns nothing
local group grp = CreateGroup( )
local boolexpr NeutralFilter = Condition( function Bolexp_UnitFiler_Conditions )
local trigger trg = CreateTrigger( )
call TriggerRegisterPlayerUnitEvent( trg, bj_PLAYER_NEUTRAL_AGGRESSIVE, EVENT_PLAYER_UNIT_DEATH, null )
call TriggerAddAction( trg, function Trig_Creep_Resp_Actions )
call DestroyTimer( GetExpiredTimer( ) )
call GroupEnumUnitsInRect( grp, bj_mapInitialPlayableArea, NeutralFilter )
call ForGroup( grp, function Group_SaveCrepsPos_Actions )
call DestroyGroup( grp )
call DestroyBoolExpr( NeutralFilter )
set NeutralFilter = null
set trg = null
set grp = null
endfunction

private function InitCreps takes nothing returns nothing
set bj_lastCreatedHashtable = InitHashtable( )
call TimerStart( CreateTimer( ), bj_CREEP_SAVE_INTERVAL, false, function SaveCreepRespPos )
endfunction

endscope
))
Версия где используется Handle - 0x100000 в качестве ключа
((кат Еще версия
((код jass
library CreepRespawnSystem initializer InitCreps
====================================================================
private struct UnitData структуру нетронять не в коем случаи...
real CreepX
real CreepY
real CreepA
real ResTime
integer LevelOrType
boolean UseAltrnateTimer = false
endstruct
=====================================================================
globals// вот тут все настройки
boolean bj_DESTROY_CORPSE = true удалять трупы умерших крипов.
boolean bj_SHOW_DEATH_EFFECT = true показать спецэффект при смерте крипа
boolean bj_SHOW_RESPAWN_EFFECT = true показать спецэфект при респауне
boolean bj_RANDOM_CREEP_TYPE = true респаунить каждый раз разных крипов но одного и того же уровня
boolean bj_CHECK_REPAWN_POS = false// проверять видит ли игрок точку респауна, и если видит пропустить респаун
string bj_DEATH_EFFECT = "Abilities\\Spells\\Orc\\FeralSpirit\\feralspiritdone.mdl" спецэффект при смерти крипа
string bj_RESPAWN_EFFECT = "Abilities\\Spells\\Human\\Resurrect\\ResurrectTarget.mdl" спецэффект при респауне крипа
real bj_CREEP_SAVE_INTERVAL = 0.20 задержка перед работой системы... Необходимо в тех картах где создание крипов просиходит во время игры.
real bj_RESP_TIMEOUT = 1.00 время чеерез которую возродится крип... В данном случае умножвется на его уровень.
private constant player bj_PLAYER_NEUTRAL_AGGRESSIVE = Player( 12 ) Нетрально враждебный, если в вашей крате вы использует другоuо игрока то введите его номер в Player( № )
вспомогательные переменные системы
не рекомендуется их изменение
private unit bj_Neutral_Creep
private timer bj_RespawnTimer
private UnitData array bj_UnitData
private UnitData bj_data
private location bl_TempPoint
private constant integer OFFSET = 0x100000
endglobals
private function bj_creepRespTimeout takes nothing returns real задержка перед респауном крипа можно вести конкретное время или выражение
return bj_RESP_TIMEOUT * GetUnitLevel( GetDyingUnit( ) ) в данном случие врмя респауна равно уровень крипа умнноженный на bj_RESP_TIMEOUT ( 2 сек )
endfunction
private function Bolexp_UnitFiler_Conditions takes nothing returns boolean фильтр сохраннения нетрально враждебынх юнитов
return GetOwningPlayer( GetFilterUnit( ) ) == bj_PLAYER_NEUTRAL_AGGRESSIVE в данном случее проходят все юниты подконтрольные игроку bj_PLAYER_NEUTRAL_AGGRESSIVE
endfunction через and можно добавить дополнительыне критерии отбора.

далее вмешательство в код настоятельно не рекомендуется...
**************************************************************************************************​********************************************
**************************************************************************************************​********************************************
function StoreStruct takes handle h, integer st returns nothing
set bj_UnitData[GetHandleId( h ) - OFFSET] = st
endfunction

function GetStoredStruct takes handle h returns integer
return bj_UnitData[GetHandleId( h ) - OFFSET]
endfunction

function FlushStoredStruct takes handle h, integer st returns nothing
call bj_UnitData[GetHandleId( h ) - OFFSET].destroy( )
endfunction

function CreateCreepOfType takes integer CreepType, real SX, real SY, real SA, real timeout returns unit
set bj_lastCreatedUnit = CreateUnit( bj_PLAYER_NEUTRAL_AGGRESSIVE, CreepType, SX, SY, SA )
set bj_data = UnitData.create( )
set bj_data.CreepX = SX
set bj_data.CreepY = SY
set bj_data.CreepA = SA
set bj_data.ResTime = timeout
set bj_data.UseAltrnateTimer = true

if bj_RANDOM_CREEP_TYPE then
set bj_data.LevelOrType = GetUnitLevel( bj_lastCreatedUnit )
else
set bj_data.LevelOrType = 3
endif

call StoreStruct( bj_lastCreatedUnit, bj_data )

return bj_lastCreatedUnit
endfunction
function RemoveCreep takes unit fp_uCreep returns nothing
call FlushStoredStruct(fp_uCreep)
call RemoveUnit( fp_uCreep )
set fp_uCreep = null
endfunction
private function Group_SaveCrepsPos_Actions takes nothing returns nothing
set bj_Neutral_Creep = GetEnumUnit( )
set bj_data = UnitData.create( )
set bj_data.CreepX = GetUnitX( bj_Neutral_Creep )
set bj_data.CreepY = GetUnitY( bj_Neutral_Creep )
set bj_data.CreepA = GetUnitFacing( bj_Neutral_Creep )
set bj_data.ResTime = 0.00

if bj_RANDOM_CREEP_TYPE then
set bj_data.LevelOrType = GetUnitLevel( bj_Neutral_Creep )
else
set bj_data.LevelOrType = GetUnitTypeId( bj_Neutral_Creep )
endif

call StoreStruct( bj_Neutral_Creep, bj_data )
endfunction
private function AddSpecialEffectZ takes string path, real x, real y, real z returns effect
set bl_TempPoint = Location( x, y )
set z = z + GetLocationZ( bl_TempPoint ) + 10.00
call RemoveLocation( bl_TempPoint )
set bj_lastCreatedDestructable = CreateDestructableZ( 'OTip', x, y, z, 0.00, 1, 0 )
set bj_lastCreatedEffect = AddSpecialEffect( path, x, y )
call RemoveDestructable( bj_lastCreatedDestructable )
return bj_lastCreatedEffect
endfunction


private function IsSpawnPosVisibly_Conditions takes real PX, real PY returns boolean
local integer nIndex = 0
if not bj_CHECK_REPAWN_POS then
return true
endif
loop
exitwhen nIndex > bj_MAX_PLAYER_SLOTS
if ( IsVisibleToPlayer( PX, PY, Player( nIndex ) ) ) then
return false
endif
set nIndex = nIndex + 1
endloop
return true
endfunction
private function Timer_Creep_Respawn_Actions takes nothing returns nothing
set bj_RespawnTimer = GetExpiredTimer( )
set bj_data = GetStoredStruct( bj_RespawnTimer )

if IsSpawnPosVisibly_Conditions( bj_data.CreepX, bj_data.CreepY ) then
if bj_RANDOM_CREEP_TYPE then
call DisplayTextToPlayer( Player( 0 ), 0, 0, "Сработало" )
call DisplayTextToPlayer( Player( 0 ), 0, 0, I2S( bj_data.LevelOrType ) )
call DisplayTextToPlayer( Player( 0 ), 0, 0, R2S( bj_data.CreepX ) )
call DisplayTextToPlayer( Player( 0 ), 0, 0, R2S( bj_data.CreepY ) )
set bj_Neutral_Creep = CreateUnit( bj_PLAYER_NEUTRAL_AGGRESSIVE, ChooseRandomCreep( bj_data.LevelOrType ), bj_data.CreepX, bj_data.CreepY, bj_data.CreepA )
else
call DisplayTextToPlayer( Player( 0 ), 0, 0, "Сработало 2" )
set bj_Neutral_Creep = CreateUnit( bj_PLAYER_NEUTRAL_AGGRESSIVE, bj_data.LevelOrType, bj_data.CreepX, bj_data.CreepY, bj_data.CreepA )
endif

if bj_SHOW_RESPAWN_EFFECT then
call DestroyEffect( AddSpecialEffectTarget( bj_RESPAWN_EFFECT, bj_Neutral_Creep, "origin" ) )
endif

call StoreStruct( bj_Neutral_Creep, bj_data )
call FlushStoredStruct( bj_RespawnTimer )

call PauseTimer( bj_RespawnTimer )
call DestroyTimer( bj_RespawnTimer )
endif

endfunction
private function Trig_Creep_Resp_Actions takes nothing returns nothing
set bj_RespawnTimer = CreateTimer( )
set bj_Neutral_Creep = GetDyingUnit( )
set bj_data = GetStoredStruct( bj_Neutral_Creep )

call StoreStruct( bj_RespawnTimer, bj_data )
call FlushStoredStruct( bj_Neutral_Creep )


if ( bj_SHOW_DEATH_EFFECT and bj_DESTROY_CORPSE and IsUnitType( bj_Neutral_Creep, UNIT_TYPE_FLYING ) ) then
call DestroyEffect( AddSpecialEffectZ( bj_DEATH_EFFECT, GetUnitX( bj_Neutral_Creep ), GetUnitY( bj_Neutral_Creep ), GetUnitFlyHeight( bj_Neutral_Creep ) ) )
elseif bj_SHOW_DEATH_EFFECT then
call DestroyEffect( AddSpecialEffect( bj_DEATH_EFFECT, GetUnitX( bj_Neutral_Creep ), GetUnitY( bj_Neutral_Creep ) ) )
endif

if ( bj_DESTROY_CORPSE ) then
call RemoveUnit( bj_Neutral_Creep )
endif

if bj_data.UseAltrnateTimer then
call TimerStart( bj_RespawnTimer, bj_data.ResTime, true, function Timer_Creep_Respawn_Actions )
else
call TimerStart( bj_RespawnTimer, bj_creepRespTimeout( ), true, function Timer_Creep_Respawn_Actions )
endif
endfunction

private function SaveCreepRespPos takes nothing returns nothing
local group grp = CreateGroup( )
local boolexpr NeutralFilter = Condition( function Bolexp_UnitFiler_Conditions )
local trigger trg = CreateTrigger( )
call TriggerRegisterPlayerUnitEvent( trg, bj_PLAYER_NEUTRAL_AGGRESSIVE, EVENT_PLAYER_UNIT_DEATH, null )
call TriggerAddAction( trg, function Trig_Creep_Resp_Actions )
call DestroyTimer( GetExpiredTimer( ) )
call GroupEnumUnitsInRect( grp, bj_mapInitialPlayableArea, NeutralFilter )
call ForGroup( grp, function Group_SaveCrepsPos_Actions )
call DestroyGroup( grp )
call DestroyBoolExpr( NeutralFilter )
set NeutralFilter = null
set trg = null
set grp = null
endfunction

private function InitCreps takes nothing returns nothing
set bj_lastCreatedHashtable = InitHashtable( )
call TimerStart( CreateTimer( ), bj_CREEP_SAVE_INTERVAL, false, function SaveCreepRespPos )
endfunction

endlibrary
))
))
Какой из вариантов лучший по вашему мнению (//ответ обосновывайте, даже если вам тупо нравится Хештебйлы с HashString//)
Вот карты, надеюсь независимые эксперты скажут каковая разница в производительности структур и хеша в данном случаи...
Прикрепленные файлы
Тип файла: w3x Vjass+struct.w3x (109.7 Кбайт, 1 просмотров )
Тип файла: w3x only hash.w3x (109.4 Кбайт, 0 просмотров )

Отредактировано quq_CCCP, 21.05.2012 в 11:22.
Старый 21.05.2012, 06:58
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Могу я рассчитывать на независимый тест? а так же мнение какой вариант использовать....
Старый 23.05.2012, 10:32
ScorpioT1000
Работаем
offline
Опыт: отключен
Производительность структур абсолютно равна производительности массивов.
Старый 23.05.2012, 12:51
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
ScorpioT1000, ну это и есть массивы по сути...
Я про хештейбыли и 2 версии си массивами... одна верися где используется система ToadCop'a а в другой массив с индексами в виде номеров хендлов с опред константами, там 2 карты с хешем и безхеша...
Как на ваш взгляд форумчане, какой из способов предпочтительнее использовать в наработках?
Старый 23.05.2012, 12:54
ScorpioT1000
Работаем
offline
Опыт: отключен
Никто не будет тестировать эту херню, составь настоящий тест.
ScorpioT1000 добавил:
Хотя его тоже никто не будет проверять...
Старый 23.05.2012, 12:58
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Ну ладно, норм тест это разве не карта нагруженная по максимуму... (выложены выше, 1 версия на хещтаблиах, а вторая на структурах)
quq_CCCP добавил:
ну ладно тогда закрой, раз всем лень...
Старый 23.05.2012, 12:59
ScorpioT1000
Работаем
offline
Опыт: отключен
ScorpioT1000 добавил:
например, запросить 1000 раз одну функцию и замерить по таймеру время выполнения итп
Старый 23.05.2012, 13:23
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
ScorpioT1000, ну я тестил без таймера визуально, забив всю карту юнитами так что не пройти...
На стурктурах залаг был меньше, но хз кто будет юзать систему для такого кол ва юнитов....
Старый 23.05.2012, 14:06
DioD

offline
Опыт: 45,134
Активность:
надо делать конкретно под свои задачи и точка, не занимайтесь хернёй ненужной
Старый 24.05.2012, 14:49
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

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

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 10:41.