问候.
我正在尝试在应用程序中实现一些多线程代码.此代码的目的是验证数据库提供的项目.验证可能需要相当长的时间(几百毫秒到几秒),因此需要将此过程分解为每个项目的自己的线程.
数据库可能在开始时每秒给它20或30个项目,但开始迅速下降,最终在24小时内达到约65K项目,此时应用程序退出.
如果有更多知识渊博的人可以查看我的代码并查看是否有任何明显的问题,我会喜欢它.我工作过的任何人都不知道多线程,所以我真的只靠我自己,就这个.
这是代码.它有点长但应该很清楚.如果您有任何反馈或建议,请告诉我.谢谢!
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