多线程保存到数据库
问题描述:
我有很多传输数组,我试图用很多线程调用这个方法。多线程保存到数据库
我试图使用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