Node.js MSSQL-节点-内存泄漏
我创建了一个查询Microsoft SQL Server的节点API。我正在使用节点10.13.0和MSSQL 5.1.0。我制作了一个模块来轻松执行查询Node.js MSSQL-节点-内存泄漏,node.js,sql-server,memory-leaks,google-chrome-devtools,Node.js,Sql Server,Memory Leaks,Google Chrome Devtools,我创建了一个查询Microsoft SQL Server的节点API。我正在使用节点10.13.0和MSSQL 5.1.0。我制作了一个模块来轻松执行查询 module.exports = async function executeQuery(query, params) { return new Promise((resolve, reject) => { new sql.ConnectionPool(config).connect().then(pool =&
module.exports = async function executeQuery(query, params) {
return new Promise((resolve, reject) => {
new sql.ConnectionPool(config).connect().then(pool => {
let request = pool.request();
if (typeof params != "undefined") {
Object.keys(params).forEach(function(key) {
request.input(key, params[key]);
});
}
return request.query(query);
}).then(result => {
sql.close();
resolve(result.recordset);
}).catch(err => {
reject(err);
sql.close();
});
});
};
我发现我有内存泄漏,因为当人们使用节点API时,内存不断增加。我用DevTools做了一些堆快照,使用--inspect
。我认为这与我的MSSQL模块有关,该模块查询我的Microsoft SQL Server。我不太了解Chrome中的节点DevTools,但我可以看到(closure)中有很多()
。它们都包含相同的对象,其中有一个对ConnectionPool中的pool的引用,这是我的变量
我错过什么了吗?我和你的关系密切吗?谢谢您的帮助。您的示例代码显示了
async
和return new Promise()
之间的混淆。选择其中一个并使用它。而且,看起来你想在完成后关闭你的游泳池。使用pool.close()
而不是sql.close()
。你说的没错。我删除了async
单词,并更改为pool.close()
。不再增加记忆,完美!