我有一个爬虫机器人,它使用parallel.for 和parallel.foreach 并行下载各种页面。MaxDegreeOfParallelism 设置为 20 左右,因为增加它似乎不会进一步提高性能,我不想让任何 Web 服务器过载。
当我从 ASP.NET 网站(所有地方)开始爬网时,它以可接受的性能运行,这一切都需要几个小时。由于此设置的设计问题,我正在更改此设置,以便可以从控制台启动它。
我需要的所有代码都在一个 dll 中,网站和控制台应用程序都可以访问它。
除了启动消息外,控制台没有输出。
问题是当我从控制台(或从调试器)运行它时,它比从 ASP.NET 网站运行它花费的时间大约长 10 倍(!)。如果 ASP.NET 版本比控制台慢,我会更容易理解。
为什么会这样,或者我该如何调试或找出原因或解决问题?
编辑: 通过 Visual Studio 调试器尝试两种变体时也会发生这种情况。从“调试”到“输出”窗口的输出类似于:
线程 '' (0x1d34) 以代码 0 (0x0) 退出。线程 '' (0xf20) 以代码 0 (0x0) 退出。线程 '' (0x3414) 以代码 0 (0x0) 退出。线程 '' (0x35c8) 以代码 0 (0x0) 退出。线程 '' (0xdc) 以代码 0 (0x0) 退出。线程 '' (0x1c98) 以代码 0 (0x0) 退出。线程 '' (0x3308) 以代码 0 (0x0) 退出。线程 '' (0x2b00) 以代码 0 (0x0) 退出。线程 '' (0x2f7c) 以代码 0 (0x0) 退出。线程 '' (0x345c) 以代码 0 (0x0) 退出。线程 '' (0x2a18) 以代码 0 (0x0) 退出。线程 '' (0x138) 以代码 0 (0x0) 退出。线程 '' (0x3650) 以代码 0 (0x0) 退出。线程 '' (0x376c) 以代码 0 (0x0) 退出。
除了在 ASP.NET 情况下,此文本的编写速度大约快 10 倍。
也许还值得一提的是,该 dll 通过 COM 为每个下载的页面调用 7zip 来压缩它。