C#Hashtable vs c ++ hash_map

时间:2009-10-27 23:15:40

标签: c# c++

我正在比较C ++和C#中的以下代码,而C#(Mono 2.4)似乎更快。 C ++代码有什么问题吗?

 #include <map>
 #include <string>
 #include <iostream>
 #include <ext/hash_map>
 #include <boost/any.hpp>

 int main()
 {
    //std::map<long, long> m;
    // hash_map is a little bit faster
    __gnu_cxx::hash_map<long, long> m;

    for( long i = 0; i < 1000000; ++i )
    {
        m[i]  = i;
    }

 }

和C#

 using System;
 using System.Collections;

 public int Main()
 {
     Hashtable m = new Hashtable();

     for( long i = 0; i < 1000000; ++i )
     {
        m[i]  = i;
     }

}

C#代码实际上是同一台机器的两倍。

$ time ./a.out

real    0m1.028s
user    0m0.986s
sys     0m0.041s

$ time mono test.exe

real    0m0.603s
user    0m0.732s
sys     0m0.090s

2 个答案:

答案 0 :(得分:8)

您需要在打开编译器优化的情况下编译C ++代码,以进行公平比较。否则,您正在将苹果与调试版本进行比较 - 编译器甚至不会尝试来发出快速代码。

在GCC中,这将是-O3标志,开头。

答案 1 :(得分:4)

一些想法:

  • 你将Mono与Boost进行比较
  • 您对Mono和C ++使用了哪些优化(默认或不是)设置?
  • C#和C ++版本的初始/默认哈希表大小是多少?
  • 您是否尝试过与其他C ++哈希映射进行比较,例如the sparse hash table
  • 请记住,不仅要查看实际时间,还要查看实际使用的CPU时间。