我正在使用带有> 的生产者/消费者模式System.Collection.Concurrent.BlockingCollection
Producer一次抓取10000条记录并将该组添加到BlockingCollection
.然后消费者(稍微慢一点)抓住那些10000并创建一个索引.
阻塞集合被限制为
每个10000行中的5个.
起初程序运行得很好,但是在它获得大约150000行后,我注意到我的计算机内存最大化并且它慢慢爬行.
似乎BlockingCollection无法null
在获取项目后将基础数组槽设置为.
码:
private static LuceneIndex index; private static BlockingCollectionblockingCol; private static void Producer() { while (true) { //...get next 10000 rows DataTable data = GetNextSet(); if(data.Row.Count > 0) blockingCol.Add(products); else break; } } private static void Consumer() { while (!BlockingCol.IsCompleted || BlockingCol.Count > 0) { DataTable data = blockingCol.Take(); index.UpdateIndex(GetLuceneDocs(data)); } } public static void Main(System.String[] args) { index = new LuceneIndex(); blockingCol = new BlockingCollection (2); // Create the producer and consumer tasks. Task Prod = new Task(Producer); Task Con = new Task(Consumer); // Start the tasks. Con.Start(); Prod.Start(); // Wait for both to finish. try { Task.WaitAll(Con, Prod); } catch (AggregateException exc) { Console.WriteLine(exc); } finally { Con.Dispose(); Prod.Dispose(); blockingCol.Dispose(); } }
任何人都可以确认拒绝此暂停吗?还有什么工作吗?