Lời chào.Thực hiện đa luồng trong C# (xem xét mã)
Tôi đang cố triển khai một số mã đa luồng trong một ứng dụng. Mục đích của mã này là để xác nhận các mục mà cơ sở dữ liệu cung cấp cho nó. Quá trình xác nhận có thể mất nhiều thời gian (vài trăm giây đến vài giây), vì vậy quá trình này cần phải được chia nhỏ thành chuỗi riêng cho mỗi mục.
Cơ sở dữ liệu có thể cung cấp 20 hoặc 30 mục trong giây, nhưng bắt đầu giảm nhanh chóng, cuối cùng đạt khoảng 65 nghìn mục trong 24 giờ, tại thời điểm đó ứng dụng thoát.
Tôi muốn nó nếu có ai hiểu biết hơn có thể xem nhanh mã của tôi và xem liệu có bất kỳ vấn đề rõ ràng nào không. Không có ai tôi làm việc với biết đa luồng, vì vậy tôi thực sự chỉ trên của riêng tôi, trên này.
Đây là mã. It's kinda dài nhưng nên được khá rõ ràng. Hãy cho tôi biết nếu bạn có bất kỳ phản hồi hoặc lời khuyên nào. Cảm ơn!
public class ItemValidationService
{
/// <summary>
/// The object to lock on in this class, for multithreading purposes.
/// </summary>
private static object locker = new object();
/// <summary>Items that have been validated.</summary>
private HashSet<int> validatedItems;
/// <summary>Items that are currently being validated.</summary>
private HashSet<int> validatingItems;
/// <summary>Remove an item from the index if its links are bad.</summary>
/// <param name="id">The ID of the item.</param>
public void ValidateItem(int id)
{
lock (locker)
{
if
(
!this.validatedItems.Contains(id) &&
!this.validatingItems.Contains(id)
){
ThreadPool.QueueUserWorkItem(sender =>
{
this.Validate(id);
});
}
}
} // method
private void Validate(int itemId)
{
lock (locker)
{
this.validatingItems.Add(itemId);
}
// *********************************************
// Time-consuming routine to validate an item...
// *********************************************
lock (locker)
{
this.validatingItems.Remove(itemId);
this.validatedItems.Add(itemId);
}
} // method
} // class
@Chris: Tại sao 'locker' tĩnh nếu các biến thành viên được bảo vệ bởi 'locker' không? 'locker' nên là một biến thành viên chứ không phải là một biến lớp. – user7116