C#散列表与C++散列表
问题描述:
我比较下面的代码在C + +和C#和C#(单声道2.4)似乎更快。 C++代码有什么问题吗?C#散列表与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
答
您需要编译C++代码并打开编译器优化以进行公平比较。否则,你正在比较苹果调试版本—编译器甚至不会尝试发出快速代码。
在海湾合作委员会这将是-O3
标志,开始。
+2
ooooops !!!!它诀窍:真0m0.207s 用户0m0.162s sys 0m0.044s – pablo 2009-10-27 23:39:49
答
的几点思考:
- 你比较单对升压
- 哪些优化(默认与否)设置你使用单声道和C++?
- 什么是C#和C++版本的初始/默认哈希表大小?
- 您是否尝试过与其他C++哈希映射进行比较,如the sparse hash table?
- 请记住,不仅要看真实时间,但实际使用的CPU时间。
您是否在开启优化的情况下编译了C++代码? – csl 2009-10-27 23:19:06
另请注意,初始哈希映射大小可能不同。例如,如果C#较大,而C++版本较低,则可能很容易看到很大的差异。 – csl 2009-10-27 23:20:08
你有没有试过Boost.Unordered? – Cogwheel 2009-10-27 23:20:49