2016-09-27 4 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)' - Вне зависимости от того, сколько потоков у вас есть только один тронет базы данных в один момент. Итак, вместо того, чтобы просить абстрактное «как сделать это быстрее», вам сначала нужно понять свой собственный код и тщательно подумать о том, чего вы хотите добиться в первую очередь. – zerkms

+0

Если вы выполняете обработку в памяти, то многопоточность является хорошим выбором. Если вы выполняете IO или работаете с базой данных, это плохой выбор. Большинство баз данных также будут поддерживать только одно соединение за раз. Таким образом, используя потоки, вы создаете много потоков, и вы открываете и закрываете многие соединения. Вот почему он медленнее. Вам лучше работать с одним потоком и одним подключением. – Enigmativity

+0

@Enigmativity «Большинство баз данных также будут допускать только одно соединение за раз» --- uhm, что? – zerkms

ответ

-2

Что вы можете асинхронный запрос так он не будет блокировать процесс посмотреть его здесь

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

+0

Это не ответ. Пожалуйста, удалите его. Это не займет много времени, чтобы получить 50 повторных баллов, чтобы отправлять комментарии. – Enigmativity

Смежные вопросы