【发布时间】:2015-09-27 05:54:38
【问题描述】:
我对 C# 并不完全陌生,但我对该语言不够熟悉,不知道如何做我需要做的事情。
我有一个文件,叫它 File1.txt。 File1.txt 有 100,000 行左右。 我将复制 File1.txt 并将其命名为 File1_untested.txt。 我还将创建一个空文件“Successes.txt” 对于文件中的每一行:
- 从 File1_untested.txt 中删除这一行
- 如果此行通过测试,则将其写入 Successes.txt
所以,我的问题是,我怎样才能多线程呢?
到目前为止,我的方法是创建一个对象 (LineChecker),为对象指定要检查的行,然后将对象传递到 ThreadPool 中。我了解如何通过 CountdownEvent 将 ThreadPools 用于一些任务。但是,一次将 100,000 个任务全部排队似乎是不合理的。我怎样才能逐渐喂养游泳池?也许一次 1000 行或类似的东西。
另外,我需要确保没有两个线程同时添加到 Successes.txt 或从 File1_untested.txt 中删除。我可以用 lock() 处理这个,对吧?我应该将什么传递给 lock()?我可以使用 LineChecker 的静态成员吗?
我只是想大致了解如何设计这样的东西。
【问题讨论】:
-
给我们一些关于你的“测试”性质的想法。它有什么作用?它是如何工作的?计算成本低还是计算成本高?
-
测试与网络相关。我希望大部分时间都花在等待网络服务器的响应上。
-
看看 BlockingCollection 类。 msdn.microsoft.com/en-us/library/dd997371(v=vs.110).aspx 它实现了你想要使用的消费者/生产者模式。
-
好的,保罗,谢谢。这正是我正在寻找的响应类型!
标签: c# multithreading