- 主题:C++的map慢的令人发指,尤其比C#慢的太多太多
起因是我有一个python运算程序,运算太慢。用C#实现后,效率大幅提升。后来想用c++改写应该更快些, 发现竟然慢很多。不能忍。
原因程序需要用到大容量字典。百千万级别。
对比了下c#和C++(unorder map):
创建3千万条记录。int,int型
我的笔记本的结果。都实现预保留了容量
C#,用0.55秒。
C++,用了6.65秒。
查询全表
C#用了0.57s
c++用了1.56秒
按理说,都还是微软家的,map实现算法应该一样。
后来用clang编译结果一样。
--来自微微水木3.5.12
--
FROM 223.104.5.*
c#的map实现应该是专门优化过的,c++的哈希表完全不行,应该就是一个性能不咋地的版本,需要高性能的哈希表,得自己去找
10年以前就是这样子,完全没啥改进
【 在 foliver 的大作中提到: 】
: 起因是我有一个python运算程序,运算太慢。用C#实现后,效率大幅提升。后来想用c++改写应该更快些, 发现竟然慢很多。不能忍。
: 原因程序需要用到大容量字典。百千万级别。
: 对比了下c#和C++(unorder map):
: ...................
--
FROM 123.112.18.*
absl/Hash.h
【 在 foliver 的大作中提到: 】
: 起因是我有一个python运算程序,运算太慢。用C#实现后,效率大幅提升。后来想用c++改写应该更快些, 发现竟然慢很多。不能忍。
: 原因程序需要用到大容量字典。百千万级别。
: 对比了下c#和C++(unorder map):
: ...................
--
FROM 60.188.217.*
我在百亿级别上用过std的unordered_map,你可能需要自定义allocator。
--
FROM 73.162.73.*
unorderedmap也是哈希表实现的
【 在 Bernstein 的大作中提到: 】
: c#的map实现应该是专门优化过的,c++的哈希表完全不行,应该就是一个性能不咋地的版本,需要高性能的哈希表,得自己去找
: 10年以前就是这样子,完全没啥改进
: --
: 蜗牛角里争何事
: 石火光中寄此身
发自「今日水木 on MI 8」
--
FROM 106.121.9.*
一看就知道是因为你用了Debug Build而不是Release Build
--
FROM 183.179.53.*
楼主试一下unorderedmap 提前reserve大小(大概的量级)
【 在 foliver 的大作中提到: 】
: 起因是我有一个python运算程序,运算太慢。用C#实现后,效率大幅提升。后来想用c++改写应该更快些, 发现竟然慢很多。不能忍。
:
: 原因程序需要用到大容量字典。百千万级别。
: 对比了下c#和C++(unorder map):
: 创建3千万条记录。int,int型
:
: ..................
发自「今日水木 on MI 8」
--
FROM 106.121.9.*
因为这么基本的一个C++库不可能慢一个数量级。
所以不是楼主程序的问题就是编译参数的问题。
从楼主的提问方式来看,很少用C++。那MSVC新手最常见掉进的性能坑就是用了Debug Build。
- 来自 水木社区APP v3.5.5
【 在 cjohny 的大作中提到: 】
: 怎么看得出来?
--
FROM 183.179.53.*
stl性能跟inline关系特别大,微软家尤甚,性能差10倍都可能
至于浮点运算,debug/release一般也就2倍
【 在 cjohny 的大作中提到: 】
: 问个小白问题,一般而言debug build和release build的差别是啥?我的理解是前者多了很多logs,还有其他的差别吗?
--
FROM 111.197.239.143