多线程保存到数据库

问题描述:

我有很多传输数组,我试图用很多线程调用这个方法。多线程保存到数据库

我试图使用Paralle类,TaskFactory和其他一些,大部分时间需要更多时间,然后没有任何多线程。 我能做些什么才能让它工作得更快?

public override bool DoInTransfer(Transfer transfer) 
    { 
     using (var database = new BankAccountsDataContext()) 
     { 
      try 
      { 
       lock (LockObject) 
       { 
        database.BankAccounts.Single(account => account.AccountNumber == transfer.DestinationBankAccount). 
         Money += transfer.Money; 

        database.SubmitChanges(); 
       } 
       return true; 
      } 
      catch (InvalidOperationException) 
      { 
       Console.WriteLine("Destination bank account doesn't exist in database"); 
       return false; 
      } 
     } 
    } 
+2

'锁(LockObject)' - 你多少个线程有irregardless只有一个会触及数据库在一刻。因此,不要问抽象的“如何让它更快”,你首先需要理解你自己的代码,并仔细考虑你想要首先实现的目标。 – zerkms

+0

如果您正在进行内存处理,那么多线程是一个不错的选择。如果你正在做IO或者使用数据库,那么这是一个不好的选择。大多数数据库一次只允许一个连接。因此,通过使用线程,您正在创建许多线程,并且您正在打开和关闭许多连接。这就是为什么它比较慢。单线程和单连接最好。 – Enigmativity

+0

@Enigmativity“大多数数据库一次只允许一个连接”---呃,什么? – zerkms

什么你可能想要的是异步查询,以便它不会阻塞进程看它这里

https://msdn.microsoft.com/en-us/data/jj819165.aspx

+0

这不是一个答案。请删除它。获得50个重要点的评论并不需要很长时间。 – Enigmativity