Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.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#_Mysql_Parallel Processing_Thread Safety - Fatal编程技术网

C# 使用线程安全性插入数据的方法。。静态类还是新类?

C# 使用线程安全性插入数据的方法。。静态类还是新类?,c#,mysql,parallel-processing,thread-safety,C#,Mysql,Parallel Processing,Thread Safety,我想使用parallel将数据插入MySQL Class Database { ... public static void insert(string line) { try { string query = "INSERT INTO db." + line + " VALUES (..)"; using (MySqlConnection conn = new MySqlConnectio

我想使用parallel将数据插入MySQL

Class Database
{
    ...

    public static void insert(string line)
    {
        try
        {
            string query = "INSERT INTO db." + line + " VALUES (..)";
            using (MySqlConnection conn = new MySqlConnection(DBconnection))
            {
                using (MySqlCommand cmd = new MySqlCommand(query, conn))
                {
                    try
                    {
                        conn.Open();
                        cmd.ExecuteNonQuery();
                    }
                    catch (MySqlException ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                    catch (InvalidOperationException ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("ERROR: " + ex.Message);
        }
    }
}
这是我的问题

Parallel.ForEach(List, value =>
{
    // HERE
});
我应该使用哪种代码

Database.insert(something);

如果我将“公共静态无效插入”更改为“公共无效插入”

和使用

new Database().insert(something);

哪种代码是线程安全的和更好的?这是一样的吗?

使用
void Insert(IEnumerable lines){}
会更好。保持连接打开并使用适当的参数。从C#的角度来看,两者都是线程安全的(所以让我们继续使用静态方法)。当然,从SQL的角度来看,它可能不安全(但这取决于表的状态以及如何管理其中的并发性)。甚至可能您不会加快任何速度,因为每个连接都将锁定,直到前一个连接完成插入。也就是说,为这么小的任务(insert)创建一个连接可能会非常庞大,因此开销可能比好处(在本例中)高得多。如果要在数据库中插入大量数据,那么我会选择批量插入。请看一个例子。@Henkholtman谢谢!你能给我一个示例代码吗@阿德里亚诺啊哈!borh是线程安全的。如果需要将数据插入到不同的表中怎么办?