parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

Misha v.3 14.04.2010 03:41 / 14.04.2010 03:58

@main[]
$sFileName[/../data/t.txt]
$bGenerate(false)

$v[^table::create[nameless]{a	b	c	d}]
^if(!(-f $sFileName) || $bGenerate){
	$t[^table::create{c1	c2}]
	$n(5000)
	^for[i](0;$n){
		^t.append{$v.[^math:random(4)]	$v.[^math:random(4)]}
	}
	^t.save[$sFileName]
}{
	$t[^table::load[$sFileName]]
}

^Erusage:measure{
	^for[i](0;100){
		$h[^m1[$t;c1;c2]]
#		$h[^m2[$t;c1;c2]]
	}
}[e]
Time: $e.time ms<br />
KB: $e.memory_kb<br />
BL: $e.memory_block



@m1[t;sField1;sField2][sValue1]
$result[^hash::create[]]
^t.menu{$sValue1[$t.$sField1]^if(!def $result.$sValue1){$result.[$sValue1][^hash::create[]]}$result.[$sValue1].[$t.$sField2][$t.fields]}

@m2[t;sField1;sField2][sValue1]
$result[^hash::create[]]
^t.menu{$sValue1[$t.$sField1]$result.[$sValue1][$result.[$sValue1] $.[$t.$sField2][$t.fields]]}

@z[]
у "мяса" удалил пробельный символы, чтобы они не влияли на результаты.

на моей системе (набор данных одинаковый).
m1: 3200 ms, 75400 KB
m2: 3100 ms, 83300 KB

время выполнения у меня существенно скачет (2000-4500 ms), но в общем случае m2 кажется чуточку быстрее (хотя возможно просто так совпало).
но он на 10% прожорливее (по моему не удивительно, т.к. на каждой итерации "копируется" хеш). цифры расхода памяти стабильны.

остаюсь пока со своим методом :)