Der bereitgestellte Code zeigt eine Multithreading-C#-Anwendung, die SQL Server-Datenbankoperationen ausführt. Allerdings kann der verwendete Ansatz zu Leistungsproblemen und Deadlocks führen. In diesem Artikel wird eine effizientere und robustere Implementierung untersucht, die die Task Parallel Library (TPL) nutzt und die Deadlock-Behandlung umfasst.
Bei der Arbeit mit Multithread-Anwendungen mit Datenbankinteraktionen kommt es zu Deadlocks unvermeidlich. Es ist wichtig, sie vorherzusehen und Mechanismen zu entwickeln, um effektiv damit umzugehen.
Erwägen Sie den folgenden Ansatz:
Der folgende Code veranschaulicht den empfohlenen Ansatz:
using System.Threading.Tasks; using System.Transactions; using System.Linq; using Microsoft.Data.SqlClient; public class MultiThreadingImproved { public static void Main(string[] args) { var ids = new int[] { 1, 2, 3, 4, 5 }; var errors = new List<ErrorType>(); Parallel.ForEach(ids, id => { try { CalculateDetails(id); } catch (Exception ex) { errors.Add(new ErrorType(id, ex)); } }); } public static void CalculateDetails(int id) { using (var db = new SqlConnection("connection string")) { db.Open(); using (var txScope = new TransactionScope( TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted })) { // Query and update operations db.SubmitChanges(); txScope.Complete(); } } } public class ErrorType { public int Id { get; set; } public Exception Exception { get; set; } public ErrorType(int id, Exception ex) { Id = id; Exception = ex; } } }
Indem Sie potenzielle Deadlocks angehen, die TPL nutzen und alternative Strategien erkunden, können Sie die verbessern Leistung und Zuverlässigkeit Ihrer Multithread-C#-Anwendungen, die mit SQL Server-Datenbanken interagieren.
Das obige ist der detaillierte Inhalt vonWie kann ich Deadlocks in Multithread-C#-Anwendungen, die auf SQL Server zugreifen, effizient behandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!