几个库DGL、STL(vc6)、STL(SGI)、DCL 、DeCal 、EZDSL的容器性能对比测试

            几个库DGL、STL(vc6)、STL(SGI)、DCL 、DeCal 、EZDSL的容器性能对比测试
                                           [email protected]

tag:Delphi泛型库,DGL,泛型,STL,DGL性能,容器,dcl,decal,ezdsl

(Delphi泛型库DGL 下载)

几个库DGL、STL(vc6)、STL(SGI)、DCL 、DeCal、EZDSL的容器性能对比测试

DGL库的实际实现性能在很多方面接近了最有名的STL实现: SGI STL !


(2006.10.20 DGL Profiler 
DGL添加红黑树,增加容器:_TMap/_TMultiMap/_TSet/_TMultiSet;
更新DeCal和EZDSL的Hash表测试,由于它们不支持动态调整大小所以造成以前的测试成绩不能反映真实情况;
  测试Visite或Find的时候会同时测试读和写,如果不能写,就读两次
  DGL和STL使用了相同的测试,测试数据集1000万个integer;选用integer能够更好地反映库的性能;
(某些Delphi库使用string的测试成绩来说自己的库比STL的快完全是误导,这完全是由string的不同实现导致的);
 其他几个库的测试,如果库的性能比较差,就会采取减小测试数据集的办法来减少测试时间;
 对于线性容器(vector/deque/list)的随机访问使用了1M个integer;
)

CPU: AMD Athlon(tm)64 3000+(1.81G)
 
DGL lib (Delphi7 Compile)========================================================
Container:  PushBack  Next Visite Random Visite Insert At Middle  PushFront
TVector     0.011 us  0.008 us    0.086 us      31400.000 us      75000.000 us
TDeque      0.009 us  0.012 us    0.219 us      100000.000 us     0.009 us
TList       0.048 us  0.017 us    8590.000 us   0.077 us          0.055 us

IVector     0.018 us  0.018 us    0.110 us      31200.000 us      75000.000 us
IDeque      0.014 us  0.019 us    0.235 us      103200.000 us     0.011 us
IList       0.073 us  0.022 us    8440.000 us   0.077 us          0.056 us

Container:  Insert      Find        Next Visite
Map         0.384 us    3.383 us    0.070 us
MultiMap    0.388 us    3.706 us    0.097 us
Set         0.461 us    3.253 us    0.064 us
MultiSet    0.457 us    3.260 us    0.064 us

HashMap      0.288 us   0.857 us    0.048 us
HashMultiMap 0.296 us   0.961 us    0.067 us
HashSet      0.284 us   0.869 us    0.052 us
HashMultiSet 0.254 us   0.868 us    0.046 us

DGL lib (Turbo Delphi2006 Compile)========================================================
Container:  PushBack  Next Visite Random Visite Insert At Middle  PushFront
TVector     0.029 us  0.007 us    0.079 us      27600.000 us      66800.000 us
TDeque      0.007 us  0.009 us    0.234 us      113200.000 us     0.006 us
TList       0.029 us  0.015 us    8520.000 us   0.066 us          0.037 us

IVector     0.025 us  0.015 us    0.107 us      33000.000 us      79600.000 us
IDeque      0.010 us  0.015 us    0.245 us      103400.000 us     0.013 us
IList       0.050 us  0.017 us    8950.000 us   0.054 us          0.034 us

Container:  Insert      Find        Next Visite
Map         0.370 us    3.592 us    0.075 us
MultiMap    0.388 us    3.873 us    0.104 us
Set         0.366 us    3.254 us    0.062 us
MultiSet    0.345 us    3.275 us    0.062 us

HashMap      0.292 us   0.832 us    0.039 us
HashMultiMap 0.275 us   0.898 us    0.060 us
HashSet      0.248 us   0.847 us    0.043 us
HashMultiSet 0.245 us   0.847 us    0.036 us

================================================================================


Delphi7=========================================================================
Container:  PushBack  Next Visite Random Visite Insert At Middle  PushFront
array       0.170 us  0.005 us    0.078 us      43800.000 us      121800.000 us
TList       0.023 us  0.013 us    0.125 us      25000.000 us      62400.000 us
================================================================================

STL (VC6 Compile)===============================================================
Container:  PushBack  Next Visite Random Visite Insert At Middle  PushFront
vector      0.041 us  0.005 us    0.078 us      31200 us          68800 us
deque       0.013 us  0.006 us    0.227 us      365600 us         0.012 us
list        0.169 us  0.022 us    21800 us      0.180 us          0.183 us

Container:  Insert      Find        Next Visite
map         0.431 us    3.174 us    0.048 us
set         0.433 us    3.174 us    0.049 us
multimap    0.430 us    3.174 us    0.047 us
multiset    0.427 us    3.174 us    0.048 us
STL (VC2005 Compile)===============================================================
vector      0.019 us  0.009 us  0.078 us  62600 us  140600 us
deque       0.067 us  0.013 us  0.227 us  168800 us  0.061 us
list        0.269 us  0.017 us  15600 us  0.277 us  0.269 us

Container:  Insert      Find        Next Visite
map         2.436 us    4.813 us    0.042 us
set         2.473 us    4.813 us    0.041 us
multimap    2.420 us    4.813 us    0.041 us
multiset    2.416 us    4.813 us    0.041 us

hash_map    0.888 us    1.501 us    0.207 us
hash_set    1.378 us    1.453 us    0.207 us
hash_multimap 1.373 us  1.450 us    0.207 us
hash_multiset 1.380 us  1.450 us    0.207 us


(SGI)STL (DEV-C++4.98 GCC max optimize Compile)=================================
Container:  PushBack  Next Visite Random Visite Insert At Middle  PushFront
vector      0.016 us  0.005 us    0.070 us      34400 us          62400 us 
deque       0.011 us  0.009 us    0.258 us      865600 us         0.013 us 
list        0.047 us  0.014 us    9400 us       0.052 us          0.036 us 

Container:  Insert      Find        Next Visite
map         0.538 us    3.226 us    0.033 us 
set         0.516 us    3.226 us    0.034 us 
multimap    0.492 us    3.174 us    0.038 us 
multiset    0.495 us    3.994 us    0.039 us 

hash_map    0.145 us    0.701 us    0.043 us 
hash_set    0.234 us    0.650 us    0.044 us 
hash_multimap 0.639 us  0.698 us    0.044 us 
hash_multiset 0.138 us  0.650 us    0.043 us 
================================================================================

DCL lib (Delphi7 Compile)=======================================================
Container:  PushBack  Next Visite Random Visite Insert At Middle  PushFront
TArrayList  0.013 us  0.030 us    0.157 us      25000.000 us      65600.000 us
TVector     0.013 us  0.027 us    0.172 us      28200.000 us      62600.000 us
TLinkedList 0.045 us  0.023 us    5780.000 us   0.052 us          0.081 us

Container:  Insert      Find        Next Visite
TBinaryTree 0.473 us    1.125 us    0.086 us
THashMap    0.422 us    0.860 us    0.075 us(copy Values to TArrayList,it is not ture test!)
THashSet    0.500 us    0.780 us    "Container.First" is O(N*N) is bad,can not test!

ps: THashXXX.Create()
    for I := 0 to FCapacity - 1 do
      SetLength(FBuckets[I].Entries, 64);) //is bad design, slow and waste memory!

ps: TLinkedList.Clear() ERROR !!!
procedure TLinkedList.Clear;
  .....
  //ERROR , must add line:  FStart:=nil;
end;
================================================================================

DeCal lab (Delphi7 Compile)=====================================================
Container:  PushBack  Next Visite Random Visite Insert At Middle  PushFront
DArray      0.272 us  0.170 us    0.321 us      53000.000 us      125000.000 us
DList       0.238 us  0.106 us    13062.000 us  0.198 us          0.188 us

Container:  Insert      Find        Next Visite
DSet        2.125 us    6.422 us    0.091 us
DMultiSet   2.055 us    5.688 us    0.086 us
DMap        1.993 us    4.921 us    0.081 us
DMultiMap   1.930 us    5.422 us    0.120 us

DHashSet    0.946 us    2.406 us    0.974 us
DMultiHashSet 0.836 us  2.407 us    0.977 us
DHashMap      1.164 us  2.266 us    0.987 us
DMultiHashMap 1.063 us  2.172 us    0.922 us
================================================================================

EZDSL lab (Delphi7 Compile)=====================================================
Container:  PushBack  Next Visite Random Visite Insert At Middle  PushFront
(TEZCollection is maxsize is N=10922*92 for test! it is small for test.)
TEZCollection 0.078 us 0.077 us   4.667 us      0.388 us          0.588 us
TDList      0.175 us  0.039 us    6250.000 us   0.167 us          0.147 us
TLinkList   0.169 us  0.031 us    13300.000 us  0.180 us          0.159 us
Container:  Push      Pop
TQueue      0.141 us  0.150 us
TStack      0.144 us  0.147 us

Container:  Insert      Find        Next Visite
THashTable  1.934 us    2.695 us    (not find way to test!)
================================================================================

 

 

 


你可能感兴趣的:(测试,Integer,Random,insert,Delphi)