У меня есть массив много передач, и я пытаюсь вызвать этот метод, используя много потоков.Сохранение многопоточности в базу данных
Я пытался использовать классы 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)' - Вне зависимости от того, сколько потоков у вас есть только один тронет базы данных в один момент. Итак, вместо того, чтобы просить абстрактное «как сделать это быстрее», вам сначала нужно понять свой собственный код и тщательно подумать о том, чего вы хотите добиться в первую очередь. – zerkms
Если вы выполняете обработку в памяти, то многопоточность является хорошим выбором. Если вы выполняете IO или работаете с базой данных, это плохой выбор. Большинство баз данных также будут поддерживать только одно соединение за раз. Таким образом, используя потоки, вы создаете много потоков, и вы открываете и закрываете многие соединения. Вот почему он медленнее. Вам лучше работать с одним потоком и одним подключением. – Enigmativity
@Enigmativity «Большинство баз данных также будут допускать только одно соединение за раз» --- uhm, что? – zerkms