2016-09-27 39 views
-1

我有很多傳輸數組,我試圖用很多線程調用這個方法。多線程保存到數據庫

我試圖使用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

回答