2014-01-08 69 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()) ,這可能更快