Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js MSSQL-节点-内存泄漏_Node.js_Sql Server_Memory Leaks_Google Chrome Devtools - Fatal编程技术网

Node.js MSSQL-节点-内存泄漏

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 =&

我创建了一个查询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 => {
            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()
。不再增加记忆,完美!