|
原帖由 〇〇 于 2010-3-16 16:32 发表 ![]()
看到plsql的nest table用hash表很快,也想在c++里用,结果很糟糕(需要vc2003编译)
D:\app>mapc6h
9,97,119,114,11843118
申请map内存46ms
申请一层内存32ms
新建一层节点624ms,recn=1000000,每毫秒读1602行,每毫秒写1602节点
新建一层hashmap节点1529ms,recn=1000000,每毫秒读654行,每毫秒写654节点
申请后面内存31ms,1000000
新建后面节点1576ms,recn=2299600,每毫秒读634行key,每毫秒写824节点
0,first=6D6F435C,renc=0
1,first=1000007F,renc=1000003
2,first=20007F00,renc=1002132
3,first=30007F7F,renc=2260123
4,first=407F0000,renc=1049901
5,first=507F007F,renc=2260125
6,first=607F7F00,renc=2284775
7,first=707F7F7F,renc=2284669
8,first=8F000001,renc=1147278
9,first=9F00007F,renc=2260124
10,first=AF007F00,renc=2273610
11,first=BF007F7F,renc=2284668
12,first=CF7F0000,renc=2284776
13,first=DF7F007F,renc=2299367
14,first=EF7F7F00,renc=2299486
15,first=FF7F7F7F,renc=2284670
释放所有动态内存15ms,2299600
释放所有map内存7488ms,2299600
总时间11372ms,2299600
3步(读入+运算+写出)总时间25849ms
相同的hash函数和比较函数,sgi stl的快很多
4个重复的50万行
D:\app>mapc6i4
9,97,119,114,11843118
申请map内存31ms
申请一层内存47ms
gid=0 found 0 time
新建一层节点312ms,recn=500001,每毫秒读3205行,每毫秒写1602节点
新建一层hashmap节点125ms,recn=500001,每毫秒读8000行,每毫秒写4000节点
申请后面内存15ms,500001
gid=1 found 292227 time
新建后面节点687ms,recn=1338064,每毫秒读727行key,每毫秒写1219节点
释放所有动态内存0ms,1338064
释放所有map内存93ms,1338064
总时间1341ms,1338064
3步(读入+运算+写出)总时间1372ms
没有重复的200万行
D:\app>cl /O2 mapc6i4.cpp
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
mapc6i4.cpp
Microsoft (R) Incremental Linker Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
/out:mapc6i4.exe
mapc6i4.obj
D:\app>mapc6i4
9,97,119,114,11843118
申请map内存78ms
申请一层内存46ms
gid=0 found 0 time
新建一层节点983ms,recn=1950041,每毫秒读1017行,每毫秒写1983节点
新建一层hashmap节点765ms,recn=1950041,每毫秒读1307行,每毫秒写2549节点
申请后面内存46ms,1950041
gid=1 found 1742267 time
新建后面节点2044ms,recn=3584098,每毫秒读954行key,每毫秒写799节点
释放所有动态内存0ms,3584098
释放所有map内存328ms,3584098
总时间4290ms,3584098
3步(读入+运算+写出)总时间4446ms
D:\app> |
|