C#多线程查询

时间:2011-06-16 10:23:17

标签: c# multithreading

我正在尝试用C#编写一个程序,它将连接到大约400台计算机并检索一些信息,让我们说它检索每台计算机上运行的Web服务列表。 我假设我需要一个线程很好的应用程序,以便能够非常快速地从如此庞大的服务器中检索信息。我对如何开始研究这个问题一无所知,你们能给我一个如何开始的先机!

谢谢!

6 个答案:

答案 0 :(得分:5)

我认为没有理由在主逻辑中使用线程。使用异步API并将其回调安排到主线程。这样你就可以获得异步的好处,但没有与线程相关的大部分困难。

如果您需要对数据执行的工作非常昂贵,那么您的逻辑代码中只需要多线程。即使这样,你通常也可以使用无副作用的函数进行并行化。

答案 1 :(得分:2)

查看Task Parallel Library

特别Data Parallelism

如果您愿意,也可以使用PLINQ

答案 2 :(得分:1)

您还应该在多核CPU上并行执行线程以提高性能。

我最喜欢的主题参考文献如下 -

http://www.albahari.com/threading/

http://www.codeproject.com/KB/Parallel_Programming/NET4ParallelIntro.aspx

答案 3 :(得分:0)

在哪里以及如何获取要查询的400台服务器的列表?

你需要经常这样做吗?

您可以使用Windows服务或安排调用您的软件的任务,在其中您可以在服务器列表中执行foreach元素并使用线程队列/池在不同的线程中启动对此类服务器的调用,但是一个最大值,所以你无论如何都不会一起开始400个线程。

更好地描述您的解决方案,我们会看到您可以做的事情:)

答案 4 :(得分:0)

看看这个图书馆:Task Parallel Library。与直接管理线程相比,您可以更有效地利用系统资源并更轻松地管理工作。

答案 5 :(得分:0)

当您开始查询所有400台计算机时,可能会对服务器端产生相当大的影响。但您可以查看并行LINQ(PLINQ),您可以在其中限制degree of parallelism

您也可以使用线程池来解决此问题,例如:一个Task课程。

创建手动线程可能不是一个好主意,因为它们不是高度可重用的并且需要创建大量的内存/ CPU