QSignalMapper与抓取senderId性能

时间:2013-09-09 08:38:22

标签: c++ qt optimization

为了在qt中的一个槽中映射多个自定义信号,我基本上有两个选项:QSignalMapper或来自senderID指针的转换(参见:http://doc.qt.digia.com/qq/qq10-signalmapper.html)。

我的问题是:哪个代码效率更高? 我想在我的程序的时间关键部分使用它。

我应该考虑使用单独的信号/插槽来优化代码吗?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

你很可能错过了什么"时间关键"意味着你的应用程序实际花费了CPU时间。你不能在没有实际测量的情况下做出任何论证。在这一点上,我相信你会进行微观优化并浪费你的时间。除非您可以衡量起点并看到实际数字的任何改进,否则不要做任何与优化相关的事情。

如果您的信号插槽连接每秒调用1000次,那么您可以做任何您想要的事情 - 开销无关紧要。如果您处于100k调用/秒范围内,那么它才开始变得重要,然后您可能会错误地构建错误的东西。

没有任何参数的信号槽连接总是比发送一些参数的连接快。您只需使用动态属性系统向发件人对象添加属性,然后使用sender()->property("...")检查该属性。与使用qobject_cast<...>(sender())和在自定义QObjectQWidget派生类上调用成员函数相比,动态属性查找需要更多时间。但这并不重要,因为除非你能衡量差异,否则你不必担心它。过早的优化确实是万恶之源。