項目中需要對兩個不同格式的存儲設備進行數據轉錄,因為數據量非常大,所以時間非常緩慢;解決 方案是使用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 } }