大量数据转录的多线程和同步处理实现2011-07-31Silent River项目中需要对两个不同格式的存储设备进行数据转录,因为数据量非常大,所以时间非常缓慢;解决 方案是使用ReaderWriterSlim类建立一个共享的同步数据,可以支持一个线程读取外部设备,向同步数据 写入;多个线程从同步数据中读取,转换格式,然后写入到本地设备。本例中采用Queue<T>作为存放数据的集合,写入线程向它的尾部写入对象,读取线程从它的头 部获取对象。需要注意的是,由于Queue会抛弃已处理的对象,所以在同步数据队列中无法验证数据对象的唯一性, 被写入的数据库需要去掉唯一约束,或在写入时向数据库请求验证。首先定义一个读写接口:
namespace Common{public interface IReaderWriter<T>{T Read(int argument);void Write(int arugment, T instance);void Delete(int argument);void Clear();}}
然后实现一个队列的读写器:
namespace Common{public class QueueReaderWriter<T> : IReaderWriter<T>{private Queue<T> queues;public QueueReaderWriter(){queues = new Queue<T>();}public QueueReaderWriter(int capacity){queues = new Queue<T>(capacity);}#region IReadWrite<T> 成员public T Read(int argument){return queues.FirstOrDefault();}public void Write(int arugment, T instance){queues.Enqueue(instance);}public void Delete(int argument){queues.Dequeue();}public void Clear(){queues.Clear();queues.TrimExcess();}#endregion}}