1

我有一个多用户支持server,它基于qxmpp编写Qt并通过继承扩展的库QXmppServerExtension。所以,我的问题是:Considering multi-user support in my server, whether it's safe or not to use a Singletone class for database connection and holding a connection for QSqlQuery?因为,所有通过数据库工作的扩展都分别使用它。

4

1 回答 1

0

您可以阅读更多关于单例的一般信息,为什么它们在许多情况下被认为是不好的:

单身人士有什么不好的?

我个人会在没有上下文的情况下避免它们。到目前为止,您购买单例而不是传递引用或类似的唯一原因,您将为服务器服务腾出一些内存。

根据讨论,当复杂性差异不明显时,最好确保有一些基准。在您的特殊情况下,为大约 1000 个客户端提供额外的 216K 内存,您将获得大约 250 MB 的额外内存使用量。

为了以防万一,我将这个数字四舍五入。这与您的服务器容量(似乎约为 16 GB)无法相提并论。如果您有其他需要大量内存的服务,那么这些服务可能是一个更令人讨厌的地方来进行优化。

话虽如此,如果您希望使用单例,您可以在 Qt 中的Q_GLOBAL_STATICQ_GLOBAL_STATIC_WITH_ARGS宏之上实现它。请注意,这在 Qt 4 中也是公开的,尽管没有记录。据我所知,它在 Qt 4 中没有适当的线程安全性,但在 Qt 5 中得到了显着改进。

于 2014-01-01T14:21:14.167 回答