什么是最推荐的.NET自定义线程池,它可以有单独的实例,即每个应用程序有多个线程池?我需要一个无限的队列大小(构建一个爬虫),并且需要为我正在抓取的每个站点并行运行一个单独的线程池.
编辑:我需要尽可能快地挖掘这些网站以获取信息,为每个站点使用单独的线程池将使我能够控制在任何给定时间在每个站点上工作的线程数.(不超过2-3)
谢谢罗伊
hangfire 文档指出:
原始 SQL Server 作业存储实现的主要缺点之一——它使用轮询技术来获取新作业。从 Hangfire 1.7.0 开始,当设置了 SlidingInvisibilityTimeout 选项时,可以使用 TimeSpan.Zero 作为轮询间隔。
我按照建议使用这些 SqlServerStorageOptions:
var options = new SqlServerStorageOptions
{
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
QueuePollInterval = TimeSpan.Zero
};
Run Code Online (Sandbox Code Playgroud)
它没有说明 SlidingInvisibilityTimeout 的实际含义,谁能澄清一下?
我的情况是,我每天早上有大约 1000 封电子邮件要发送,而且我一直在突破每分钟 30 封邮件的 Office365 限制并被拒绝,所以我使用 Hangfire 将它们排在一个工作线程中,并添加了一个每个任务结束时 2 秒 Thread.Sleep。这很好用,但我的 CPU 使用率增加了大约 20% 由 hangfire 引起(如此处报告的那样),并且在服务器繁忙时导致频繁超时。
我试图实现的行为是:
感谢您的帮助。
我有一个包含5个部分的页面。每个部分大约需要1秒钟的渲染时间。
Page_Load()
{
RenderSection1(); //1 sec
RenderSection2(); //1 sec
RenderSection3(); //1 sec
RenderSection4(); //1 sec
RenderSection5(); //1 sec
}
Run Code Online (Sandbox Code Playgroud)
我想加快此页面的加载。但是同时请确保它不会降低Web应用程序其他部分的性能,并且也不会使IIS崩溃。
有几种方法:
使用AJAX请求。需要是对控制器或Web服务的MVC样式请求。
在每个部分周围使用UpdatePanel将不起作用-因为如果我尝试同时使用以下方法向多个UpdatePanel提交刷新,则请使用以下方法:http :
//encosia.com/2007/07/13/easily-refresh-an-updatepanel-using -javascript /,则最后一个请求将始终获胜:http :
//www.codeproject.com/Tips/57035/Simultanious-Async-Requests-Using-Multiple-Update-.aspx
使用正确回答 中所述的ASP.NET线程在ASP.NET Web应用程序中创建线程。因此,我将为每个调用使用单独的线程:RenderSection1,RenderSection2等。
将占用时间的逻辑(通常是数据库请求)移到另一个DLL或外部Web服务中的Application Service类中。就像是
OrderDTO GetDataForViewOrder(int orderID)
{
}
Run Code Online (Sandbox Code Playgroud)
并在该DLL中使用多个线程。这种方法似乎提供了最佳的可伸缩性,但是还将UI详细信息引入了Application Services层。
您认为哪种方法最好,为什么?