Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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
C# 更新记录时性能非常慢_C#_Performance_Postgresql - Fatal编程技术网

C# 更新记录时性能非常慢

C# 更新记录时性能非常慢,c#,performance,postgresql,C#,Performance,Postgresql,我正在编写我的C#应用程序,它连接到数据库,进行耦合选择,然后将记录插入网络中的服务器 但我有大约4万条记录,我的程序处理一条记录,大约1秒 我不知道如何提高性能。这是我的sql getter和inserter。有什么建议吗 public bool insert_and_ConfirmSQL(String Query, String comments) { bool success = false; NpgsqlCommand cmd = new

我正在编写我的C#应用程序,它连接到数据库,进行耦合选择,然后将记录插入网络中的服务器

但我有大约4万条记录,我的程序处理一条记录,大约1秒

我不知道如何提高性能。这是我的sql getter和inserter。有什么建议吗

    public bool insert_and_ConfirmSQL(String Query, String comments)
    {
        bool success = false;
        NpgsqlCommand cmd = new NpgsqlCommand();
        NpgsqlConnection mycon = new NpgsqlConnection();
        string connstring = String.Format("Server={0};Port={1}; User Id={2};Password={3};Database={4};", tbHost, tbPort, tbUser, tbPass, tbDataBaseName);
        mycon.ConnectionString = connstring;
        cmd = mycon.CreateCommand();
        cmd.CommandText = Query;
        mycon.Open();

        int temp = 0;
        try
        {
            temp = cmd.ExecuteNonQuery();
            success = true;
        }
        catch
        {
            success = false;
        }
        finally
        {
            if (mycon.State.ToString() == "Open")
            {
                mycon.Close();
            }
        }
        return success;
    }


    public String getString(String sql, NpgsqlConnection conn)
    {
        using (DataSet ds = new DataSet())
        {
            using (NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn))
            {
                da.Fill(ds);
                if (ds.Tables.Count > 0)
                {
                    DataTable dt = ds.Tables[0];
                    //  check count of Rows 
                    if (dt.Rows.Count > 0)
                    {
                        object o = dt.Rows[0][0];
                        if (o != DBNull.Value && o != null)
                        {
                            return o.ToString();
                        }
                    }
                }
            }
        }
        // Return default value 
        return "";
    }

有时,您可以通过使用sql数据读取器而不是数据集来提高性能

然后,您可以在从数据库读取数据时检查数据

因此,我将使用DataReader实现上述代码并对其重新计时


编辑:尤其是getString方法。如果ds.Fill占用了40k行,则可能是性能问题的原因

有时,您可以通过使用sql数据读取器而不是数据集来提高性能

然后,您可以在从数据库读取数据时检查数据

因此,我将使用DataReader实现上述代码并对其重新计时


编辑:尤其是getString方法。如果ds.Fill占用了40k行,则可能是性能问题的原因

我们不知道sql语句,因此没有机会帮助您使用sql语句

唯一(猜测)可见的问题是,您每次都试图使用一个新连接循环40K条记录(您知道怎么做)。作为代码提供的两个例程都能做到这一点。那么,您是否需要40K调用来插入_和_ConfirmSQL和/或另40K调用getString例程

如果你真的循环,那么更新你的代码,只使用一个连接而不关闭它;对于数据集也可以这样做(使用前必须清除它:ds.clear()

不用说,如果您的查询很大(就数据而言),并且/或者索引没有覆盖查询,那么延迟是可以预料的


尝试使用这种方法并让我们知道。

因为我们不知道sql语句,所以没有机会帮助您使用sql语句

唯一(猜测)可见的问题是,您每次都试图使用一个新连接循环40K条记录(您知道怎么做)。作为代码提供的两个例程都能做到这一点。那么,您是否需要40K调用来插入_和_ConfirmSQL和/或另40K调用getString例程

如果你真的循环,那么更新你的代码,只使用一个连接而不关闭它;对于数据集也可以这样做(使用前必须清除它:ds.clear()

不用说,如果您的查询很大(就数据而言),并且/或者索引没有覆盖查询,那么延迟是可以预料的


尝试使用这种方法并让我们知道。

您是否分析了数据库以确定这是否是问题所在?请尝试使用SQL Management Studio之类的工具直接在数据库上执行这些查询。如果这些也很慢,那么您知道问题出在DB端。尽管1秒对于40k行的完整表扫描来说也是多余的。@romkyns-40000行对于一个典型的数据库来说不是什么。您是否分析了数据库以确定这是否是问题所在?请尝试直接在数据库上执行这些查询,使用类似SQL Management Studio的工具。如果这些也很慢,那么您知道问题出在DB端。虽然1秒对于40k行的完整表扫描来说也是多余的。@romkyns-40000行对于一个典型的数据库来说不是什么。