我的应用程序是在iis 6上运行的asp.net 3.5(Windows 2003) 该应用程序每天为1000名用户提供服务(在线用户数为100-500)。
我想每周向客户发送一封电子邮件简报。
每次约有200,000封电子邮件。
这是我正在使用的代码:
ThreadPool.QueueUserWorkItem(new WaitCallback(AsyncProcessMailerQueue), null);
private static void AsyncProcessMailerQueue(object data)
{
for (int i=0;i<users.count ; i++)
{
MailMessage message = new MailMessage();
.......
SmtpClient smtpClient = new SmtpClient();
smtpClient.Send(message);
}
}
在本地测试时(在我的开发机器上),我看到应用程序的工作速度慢了很多。
我在这里看过其他帖子谈论ThreadPool vs Thread,但似乎没有人确定哪个更好。
答案 0 :(得分:3)
按优先顺序排列:
Thread t = new Thread(new ThreadStart(DoWork));
答案 1 :(得分:2)
离开asp.net将是一个不错的选择。这可能是您从命令提示符运行的简单命令行应用程序。为什么需要服务或将其作为URL托管?
答案 2 :(得分:1)
是的我认为你应该将其从你的网络应用程序中移出,因为你正在从线程池中获取服务请求所需的线程(听起来你获得了大量的流量)。
你也同时发送电子邮件,这意味着线程的使用时间比它需要的时间长得多 - 如果你继续使用这个ThreadPool方法,我建议将它们排队到IIS SMTP服务(查看System.Net .Mail.SmtpClient.DeliveryMethod)只是将文件写入队列文件夹,由IIS SMTP服务监视。
但实际上你应该考虑将其转移到Windows服务。