我需要开发一个非常类似于网络蜘蛛/爬虫的.NET应用程序。从网站获取数据,处理数据,将数据保存在数据库中并发送电子邮件。
我想一次处理尽可能多的网站,因为机器可以(在合理范围内)。每个过程都是相互独立的。我将使用一些第三方服务器组件,例如Chilkat Software。只使用一台计算机。从Windows 7 64bit开始,然后转到Windows Server。
我应该使用哪种架构或设计来处理我提到的要求?运行应用程序的几个实例(最简单的方法)?使用Windows WorkFlow Foundation(从未使用过)?某种并行处理? ..? 指向遵循建议设计的示例应用程序的指针是一个加号。
答案 0 :(得分:2)
您可以使用管道架构:抓取 - >过程 - >保存到db - >电子邮件;线程安全队列应该用于连接不同的阶段;每个阶段可以单独设置为使用N个线程。然后在生产环境中,测量和调整每个阶段可以使用的线程数,使得没有阶段等待其他阶段在大多数时间提供/使用数据。
请注意,还有许多其他因素可以调整以获得最佳效果。示例:假设您的数据库每秒最多可以处理一次保存,但数据库之前的管道可以轻松地每秒生成10页,在这种情况下,您可能希望将数据库和进程之间的队列大小限制为稍微小一些。 / p>
调整所有这些因素并观察它们如何相互作用是有趣和有趣的。与简单的多线程/处理方法相比,您会惊讶地发现机器的性能如何。
答案 1 :(得分:0)
我建议使用System.Threading.Tasks library来做这样的事情。
然后,您可以在自己的应用中执行以下操作:
foreach(var input in listToProcess)
{
Task.Factory.StartNew(() => ProcessInput(input));
}
private static void ProcessInput(Foo myInput) // for example, this might be a url in your case
{
// your specific processing here: get data from site, process, save, email
}
答案 2 :(得分:0)
工作流也可以用来做这种事情。它具有一些显着的跟踪优势,可以为您提供发生的所有事情的详细日志,并且可以轻松处理多个异步任务。
鉴于你从未使用它,你的缺点将是提升。我们提供动手实验室,让您快速前进。
上的动手实验