提供的程式碼展示了執行 SQL Server 資料庫操作的多執行緒 C# 應用程式。然而,所使用的方法可能會導致效能問題和死鎖。本文探討了一種利用任務並行庫 (TPL) 並包含死鎖處理的更有效率、更穩健的實作。
在使用涉及資料庫互動的多執行緒應用程式時,死鎖是不可避免的。預測它們並開發有效處理它們的機制非常重要。
考慮以下方法:
以下程式碼示範了建議的方法:
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; } } }
透過解決潛在的僵局、利用TPL 並探索替代策略,您可以增強與SQL Server 資料庫互動的多執行緒C# 應用程式的效能和可靠性。
以上是如何有效率地處理多執行緒C#應用程式存取SQL Server的死鎖?的詳細內容。更多資訊請關注PHP中文網其他相關文章!