我在类中找到了这行代码,我必须修改它:
::Configuration * tmpCo = m_configurationDB;//pointer to current db
Run Code Online (Sandbox Code Playgroud)
而且我不知道究竟是什么意思是双重冒号前面的类名.没有它我会读:声明tmpCo
作为指向类的对象的指针Configuration
...但前面的双冒号混淆了我.
我还发现:
typedef ::config::set ConfigSet;
Run Code Online (Sandbox Code Playgroud) 我的python应用程序有问题,我认为它与python垃圾收集有关,即使我不确定...
问题是我的应用程序需要花费大量时间退出并切换到下一个功能.
在我的应用程序中,我处理非常大的字典,包含数千个大型对象,这些对象是从包装的C++类中实例化的.
我在程序中放了一些时间戳输出,我看到在每个函数结束时,当函数内部创建的对象超出范围时,解释器在调用下一个函数之前花费了大量时间.并且我在应用程序结束时观察到同样的问题,程序应该退出:在屏幕上的最后一个时间戳和新提示的外观之间花费了很多时间(〜小时!).
内存使用情况稳定,所以我真的没有内存泄漏.
有什么建议?
可以成千上万的大型C++对象的垃圾收集速度慢吗?
有没有办法加快这个?
更新:
非常感谢您的所有答案,您给了我很多调试我的代码的提示:-)
我在Scientific Linux 5上使用Python 2.6.5,这是一个基于Red Hat Enterprise 5的自定义发行版.实际上,我并没有使用SWIG为我们的C++代码获取Python绑定,而是使用Reflex/PyROOT框架.我知道,它在粒子物理学之外并不是很有名(但仍然是开源的,可以免费获得),我必须使用它,因为它是我们主要框架的默认值.
在这种情况下,来自Python端的DEL命令不起作用,我已经尝试过了.DEL只删除链接到C++对象的python变量,而不是内存中的对象本身,它仍然由C++端拥有...
......我知道,这不是标准我猜,有点复杂,对不起:-P
但是按照你的提示,我会描述我的代码,我会按照你的建议给你回复更多细节.
额外更新:
好的,按照你的建议,我用我的代码检测cProfile
,我发现实际上gc.collect()
功能是占用大部分运行时间的功能!
这里是cProfile
+ pstats
print_stats()的输出:
>>> p.sort_stats("time").print_stats(20) Wed Oct 20 17:46:02 2010 mainProgram.profile 547303 function calls (542629 primitive calls) in 548.060 CPU seconds Ordered by: internal time List reduced from 727 to 20 due to restriction ncalls tottime percall cumtime percall filename:lineno(function) 4 345.701 86.425 345.704 86.426 {gc.collect} 1 167.115 167.115 200.946 200.946 PlotD3PD_v3.2.py:2041(PlotSamplesBranches) 28 …
目前,我定义了一个包含 4 个不同阶段的管道来为我的项目构建依赖项:
stages:
- dependencies-A
- dependencies-B
- dependencies-C
- dependencies-D
- build
Run Code Online (Sandbox Code Playgroud)
因此,管道中的作业现在运行如下:
A -> B -> C -> D -> build
Run Code Online (Sandbox Code Playgroud)
实际上,B 依赖于 A,D 依赖于 C。子管道A->B
是C->D
独立的,我想并行运行这两个子管道,以加快构建速度。那么,这样:
A -> B \
build
C -> D /
Run Code Online (Sandbox Code Playgroud)
这可能吗?
感谢您的热心帮助。
我有一个数据处理模型,它由许多处理数据块的算法链组成.每个链都是算法图,我用TBB图类实现.
现在我希望有一个类似"图形池"的东西,即一个任务池,每个任务包含一个tbb :: graph.通过这种方式,我可以在数据块上并行运行算法链.
你能否指出任何类似于"图表池"的TBB示例,或者你可能建议和暗示实现它?
分析我的一个C++程序我刚刚发现在创建一堆文件时调用std :: ofstream()比使用系统"touch"花费的时间少得多.
所以现在我想知道在Linux上std :: ofstream映射到什么操作系统功能.
你知道std :: ofstream()调用什么来创建文件吗?
谢谢
我在我的机器上有通常的gcc(在/ usr/bin/gcc),当我为我正在处理的某个框架设置环境时,另一个(更新的)被链接.
我想用/ usr/bin/gcc上的旧版本编译,而不是使用新版本.
我必须使用"gmake"命令进行编译(自定义编译设置).
在不改变PATH的情况下,我怎么能"告诉"gmake使用不同的gcc?
在我们非常大的框架中,跟踪一个包中的错误,我最终调用了一个函数.
这个函数没有在我正在处理的包中定义,对包本身的搜索并没有给我任何关于在框架中定义该函数的地方的线索.
显然它是在框架内某处的另一个包中定义的.
我必须知道这个函数究竟做了什么,所以我想"询问"编译器定义的位置....因为包编译得很好,所以必须在某处定义函数!;-)
怎么办?
我正在将一个程序移植到 Eigen。
现在我必须重写一个方法,该方法将 3D 变换矩阵从一个坐标系 A(由其原点和两个轴定义)返回到第二个坐标系(仍然由原点和两个轴定义)。
我想知道 Eigen 中是否有一种方法可以找到该矩阵。我浏览了参考指南,但我还没有找到任何有用的方法......
更多详情:
我移植到 Eigen 的方法接受 6 个点(向量)(fr0、fr1、fr2、to0、to1、to2)。“fr0”是CS1(坐标系1)的原点,“fr1”是定义CS1轴的点,“fr2”是定义CS1第二轴的点;“to0”是CS2的起源,依此类推……