首先,我在我的安全websocket服务器应用程序上运行valgrind并发现了一个问题(在Qt Memcheck中我必须检查"外部错误"才能看到它) - 一些字节肯定会丢失 - 指向main我的QCoreApplication::exec()呼叫所在的位置.在堆栈跟踪中,在调用之后,只有一些Qt库,从开头到libQt5Core结尾libQt5WebSockets.丢失的字节数随着连接数的增加而增加.我仔细检查了我删除了QWebSocket返回的所有实例QWebSocketServer::nextPendingConnection().我也删除了QWebSocketServer实例.有趣的是,valgrind在运行sslechoserver演示时也没有报告任何错误,也没有在不安全模式下运行我的服务器(没有SSL).我不知道这是否是一个实际问题.
其次,更重要的是,我观察到消耗的内存随着每个新连接不断增加(即使旧连接已关闭且QWebSocket实例被删除,实际上大部分时间都有0或1个活动连接)在我的应用程序和sslechoserver演示.我在Ubuntu上使用systemmonitor,在Windows上使用Windows任务管理器进行观察.在建立了数万个连接之后,报告的内存使用量为几十兆字节,而在应用程序生命周期的开始时,它大约为1.5 MB.
我用Qt 5.5.1和5.6.0(Ubuntu上的GCC,Windows上的MSVC)测试了它.
我弄错了吗?Qt的websockets中有错误吗?是sslechoserver演示不正确的?
更新:我也尝试过echoserver演示(没有SSL),消耗的内存也在不断增加.
更新2:我们得出结论,Qt中肯定存在错误.错误报告在这里:https: //bugreports.qt.io/browse/QTBUG-53503
我将从 PHP w/ MySQL 转向 ASP .NET Core。
问题:
为了便于说明,假设有以下两个表:
T: {ID, Description, FK}和States: {ID, ID_T, Time, State}。它们之间是1:n的关系(ID_T参考文献T.ID)。
T我需要具有某个特定值FK(可以说)的所有记录1以及相关的最新记录States(如果有)。
从 SQL 的角度来说,可以写成:
SELECT T.ID, T.Description, COALESCE(s.State, 0) AS 'State' FROM T
LEFT JOIN (
SELECT ID_T, MAX(Time) AS 'Time'
FROM States
GROUP BY ID_T
) AS sub ON T.ID = sub.ID_T
LEFT JOIN States AS s ON T.ID = s.ID_T AND sub.Time = s.Time
WHERE FK …Run Code Online (Sandbox Code Playgroud) linq asp.net entity-framework entity-framework-core asp.net-core