使用postgresql ExecuteNonQuery时C#内存泄漏

时间:2017-07-25 05:53:47

标签: c# postgresql memory-leaks npgsql

在C#下使用Postgresql我有内存泄漏。有简单的方法可以避免它吗? (google告诉我用另一个DB替换Postgres。这是不可能的,我必须连接到现有系统)。

重现内存泄漏:

C#(dot net 4)运行大量更新查询,如下一个代码所示:

using Npgsql;

。 。

class dbCommector
{
    private Object lockerObj = new object();
    private NpgsqlConnection conn = null;

    public dbCommector()
    {
        conn = new NpgsqlConnection("Server=127.0.0.1;User Id=user;" +
                                        "Password=password;Database=demo;");
        conn.Open();
    }

    public void Close()
    {
        conn.Close();
    }
    public void NoAnsExecute(String query)
    {
        lock (lockerObj)
        {
            using (NpgsqlCommand cmd = new NpgsqlCommand(query, conn))
            {
                //If I put here "return", no leakage.
                cmd.ExecuteNonQuery();
            }
        }
    }
}

//从这个类中创建一个对象

dbCommector myConnector = new dbCommector();

//然后调用很多下一个查询或类似的:

myConnector,NoAnsExecute ("update table set value=0 where id=1");

0 个答案:

没有答案