-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;
}
}
}
'鎖(LockObject)' - 你多少個線程有irregardless只有一個會觸及數據庫在一刻。因此,不要問抽象的「如何讓它更快」,你首先需要理解你自己的代碼,並仔細考慮你想要首先實現的目標。 – zerkms
如果您正在進行內存處理,那麼多線程是一個不錯的選擇。如果你正在做IO或者使用數據庫,那麼這是一個不好的選擇。大多數數據庫一次只允許一個連接。因此,通過使用線程,您正在創建許多線程,並且您正在打開和關閉許多連接。這就是爲什麼它比較慢。單線程和單連接最好。 – Enigmativity
@Enigmativity「大多數數據庫一次只允許一個連接」---呃,什麼? – zerkms