Dan*_*röm 12 c++ mfc memory-management
上周我在C#中写了几行代码,将一个大文本文件(300,000行)激活到一个Dictionary中.编写花了十分钟,并在不到一秒的时间内执行.
现在我将这段代码转换为C++(因为我需要在旧的C++ COM对象中).到目前为止,我已经花了两天时间.:-(虽然生产力差异本身令人震惊,但这是我需要一些建议的表现.
加载需要7秒钟,甚至更糟糕的是:之后需要花费很多时间来释放所有CStringW.这是不可接受的,我必须找到一种方法来提高性能.
有没有机会我可以分配这么多字符串而不会看到这种可怕的性能退化?
我现在的猜测是,我必须将所有文本填充到一个大型数组中,然后让我的哈希表指向此数组中每个字符串的开头并删除CStringW内容.
但在那之前,你有C++专家的建议吗?
编辑:我给自己的答案如下.我意识到这对我来说是最快的路径,也是我认为正确的方向 - 更多托管代码.
Tim*_*Tim 10
让人惊讶.摆脱CStrings ......
尝试一个探查器.你确定你不只是运行调试代码吗?
请改用std :: string.
编辑:
我只是对ctor和dtor比较做了一个简单的测试.
CStringW似乎需要2到3倍的时间来执行新的/删除.
迭代1000000次为每种类型做新/删除.没有别的 - 和每个循环之前和之后的GetTickCount()调用.CStringW一直使用两倍的时间.
虽然我怀疑,这并没有解决你的整个问题.
编辑:我也不认为使用字符串或CStringW是真正的问题 - 还有其他事情导致你的问题.
(但是为了上帝的缘故,无论如何都要使用stl!)
你需要对它进行分析.那是一场灾难.