VadimF
Дата: 22.09.2005 11:35:29
Многопользовательская версия и Cache' PC - отдельные дистрибутивы.
Для Cache' PC не нужен лицензионный ключ. Cache' PC не может использовать лицензионный ключ.
В демоверсии ограничены размеры буфера глобалов и программ.
Это негативно сказывается на производительности.
Данные и программы не кэшируются в памяти, а каждый раз запрашиваются с диска.
Соответственно, если нужно тестировать производительность Cache', нужно запрашивать многопользовательскую версию с временной лицензией в офисе InterSysystems.
Вадим
Mr N
Дата: 23.09.2005 12:07:31
Поставил версию 5.0.15, нашёл в ней исходники %GSIZE, в инсталяхе версии 5.0.5 почему-то не мог найти опцию установки исходников.
Из найденного кода получилась следующая функция, которая в качестве параметра получает имя глобала без знака "^" и возвращает размер глобала в байтах:
GSize(G)
S DIR = ""
If $zbitget($zversion(0),21) {
Set dirinfo=$zu(49,DIR)
Set bigdb=$Piece(dirinfo,",",21)
Set blksiz=$Piece(dirinfo,",",2)
} else {
Set bigdb=0
Set blksiz=2048
}
Set datasize=$Case(blksiz,2048:2036,:(blksiz-$zu(40,32,10)))
s (n,k,c)=0 ;n:bytes,k:blocks,c:contiguous blocks?
Set rc=$$GetGlobalPointers^%DM(DIR,G,,.b)
//If ('rc) Do ShowMessage(rc,$Get(IO,0)) Quit ""
o 63
f q:'b d q:$d(err) s p=b+1,b=$$GetLinkBlockFromViewBuffer^%DMREPAIR(bigdb),c=c+(p=b)
. v b s t=$$GetBlockTypeFromViewBuffer^%DMREPAIR(bigdb)
. i t-8,t-12 s err="?TOB: "_b_":"_t q ;unexpected type of block
. s n=n+$$GetOffsetFromViewBuffer^%DMREPAIR(bigdb),k=k+1 ;q:t=8 ;so much for normal data blocks
. Set n=n-$Case(bigdb,0:0,:$zu(40,32,10)) ;Adjust number for header bytes
. f i=1:1 s x=$v(i*2-1,-6) q:x="" d q:$d(err)
. . ;Next line covers all the long string types for both 2k and bigdb
. . s v=$v(i*2,-6) If $a(v)'=5,($a(v)'=$Case(bigdb,0:9,:7)),($a(v)'=3) Quit
. . s nb=$p(v,",",2),r=$p(v,",",3) ;nb: # of blocks,r:#bytes in last block
. . s n=n+((nb-1)*blksiz)+r,k=k+(nb-1)+''r
c 63
//q n_","_k_","_c_$g(err)
Set bytes = $fn(n,",")
Quit bytes