2014-01-08 32 views
1

以下是长字符串很慢:KDB C++接口:创建STD字节列表:: string的

std::string s = "long string"; 
K klist = DBVec::CreateList(KG , s.length()); 
for (int i=0; i<s.length(); i++) 
{ 
    kG(klist)[i]=s.c_str()[i]; 
} 

它可以足够快(< 100毫秒)字符串可达100K,只是速度放缓到爬行(几十分钟,可能几小时)的几百万字符的字符串。除了kG之外,我没有看到可以产生非线性的东西。我没有看到访问函数kG是非常量时间的任何原因,但是这个循环中没有其他的东西。不幸的是,我不知道kG是如何工作的,因为缺少文档。

问题:给定一个二进制数据blob作为std :: string,构造一个字节列表的有效方法是什么?

回答

0

这工作:

memcpy(kG(klist), s.c_str(), s.length()); 

仍然不知道为什么这个循环是不是O(N)。

2

kGk.h中定义的宏,其扩展到((x)->G0),即遵循K个对象

http://kx.com/q/d/a/c.htm#Strings文件kp,直接从字符串创建A K String对象的G0指针,所以想必你可以做K klist = kp(s.c_str()) ,这可能更快