在kdb中使用.Q.w的内存统计的效率
为了获得内存统计信息,我们在kdb中使用.Q.w[]。 .Q.w的输出如下在kdb中使用.Q.w的内存统计的效率,kdb,Kdb,为了获得内存统计信息,我们在kdb中使用.Q.w[]。 .Q.w的输出如下 q).Q.w[] used| 260928 heap| 67108864 peak| 67108864 wmax| 0 mmap| 0 mphy| 270267293696 syms| 1287 symw| 57285 我已经编写了类似的词典,提供了与.Q.w相同的输出 q)`used`heap`peak`wmax`mmap`mphy`syms`symw!(value["\\w"], value ["\\w 2"])
q).Q.w[]
used| 260928
heap| 67108864
peak| 67108864
wmax| 0
mmap| 0
mphy| 270267293696
syms| 1287
symw| 57285
我已经编写了类似的词典,提供了与.Q.w相同的输出
q)`used`heap`peak`wmax`mmap`mphy`syms`symw!(value["\\w"], value ["\\w 2"])
在测试中,我可以看到我的字典运行速度比.Q.w[]快少数样本:
q)\t:100000 .Q.w[]
44
q)\t:100000 `used`heap`peak`wmax`mmap`mphy`syms`symw!(value["\\w"], value ["\\w 2"])
42
q)\t:1000000 .Q.w[]
451
q)\t:1000000 `used`heap`peak`wmax`mmap`mphy`syms`symw!(value["\\w"], value ["\\w 2"])
407
q)\t:1500000 .Q.w[]
662
q)\t:1500000 `used`heap`peak`wmax`mmap`mphy`syms`symw!(value["\\w"], value ["\\w 2"])
613
q)\t:2000000 .Q.w[]
860
q)\t:2000000 `used`heap`peak`wmax`mmap`mphy`syms`symw!(value["\\w"], value ["\\w 2"])
813
q)\t:2500000 `used`heap`peak`wmax`mmap`mphy`syms`symw!(value["\\w"], value ["\\w 2"])
999
q)\t:2500000 .Q.w[]
1071
我的问题是,除了在.Q.w函数中使用的(点运算符),使用值函数是否更有效 考虑到差异有多小,我怀疑这可能只是运行lambda/函数与不运行lambda/函数的开销
q)\t:2500000 1+1
129
q)\t:2500000 {1+1}[]
165
另外-我不确定
value[“\\w 2”]
是否在做您认为它在做的事情。要复制.Q.w
,您应该通过0
或1
。。。。。传递2
是试图将工作区限制调整为2mb鉴于差异非常小,我怀疑这可能只是运行lambda/函数与不运行lambda/函数的开销
q)\t:2500000 1+1
129
q)\t:2500000 {1+1}[]
165
另外-我不确定
value[“\\w 2”]
是否在做您认为它在做的事情。要复制.Q.w
,您应该通过0
或1
。。。。。传递2
是试图将工作区限制调整为2mbTerry是正确的,这只是lambda的开销。我只想回答这部分问题
使用除(点运算符)以外的值函数是否更有效
Q.w函数中使用了哪一个
value
/get
和.Q.w
定义中的点运算符本质上是相同的
q)get
.:
q)value
.:
在这里,我们可以忽略get
和value
定义的尾随冒号。我们可以通过将这些定义包装在括号中以获得k
功能,或者放入k
语言来检查这是否是事实
q)(.)"\\w"
343584 67108864 67108864 0 0 17054650368
q)(.:)"\\w"
343584 67108864 67108864 0 0 17054650368
q)\
."\\w"
343584 67108864 67108864 0 0 17054650368
事实上。。。我们可以添加任意数量的内容!无论如何,解析器都会将其分解为一个
q)(.::)"\\w"
343584 67108864 67108864 0 0 17054650368
q)(.:::::::::::::::::::::::::::::::::)"\\w"
343616 67108864 67108864 0 0 17054650368
q)parse ".:::"
.:
从内存来看,在
之后使用冒号迫使重载的
以一元形式运行。特里说得对,这只是兰姆达的开销。我只想回答这部分问题
使用除(点运算符)以外的值函数是否更有效
Q.w函数中使用了哪一个
value
/get
和.Q.w
定义中的点运算符本质上是相同的
q)get
.:
q)value
.:
在这里,我们可以忽略get
和value
定义的尾随冒号。我们可以通过将这些定义包装在括号中以获得k
功能,或者放入k
语言来检查这是否是事实
q)(.)"\\w"
343584 67108864 67108864 0 0 17054650368
q)(.:)"\\w"
343584 67108864 67108864 0 0 17054650368
q)\
."\\w"
343584 67108864 67108864 0 0 17054650368
事实上。。。我们可以添加任意数量的内容!无论如何,解析器都会将其分解为一个
q)(.::)"\\w"
343584 67108864 67108864 0 0 17054650368
q)(.:::::::::::::::::::::::::::::::::)"\\w"
343616 67108864 67108864 0 0 17054650368
q)parse ".:::"
.:
从内存来看,在
之后使用冒号迫使重载的
以一元形式运行。因为lambda,这是一项开销。因为lambda,这是一项开销。