Моим приложением является asp.net 3,5 работающих iis 6 (окна 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);
}
}
При тестировании этого локально (на моей dev машине) я вижу, что приложение работает намного медленнее.
Я видел другие сообщения, здесь говоря о ThreadPool по сравнению с Потоком, но кажущийся никто не уверен, который лучше.
В порядке предпочтения:
Thread T = New Thread (новый ThreadStart (Dowork));
Выезд из ASP.NET будет хорошим выбором. Это может быть простой приложение командной строки, которое вы запускаете из командной строки. Зачем вам нужен сервис или он должен быть размещен как URL?
Да, я думаю, вы должны переместить это из вашего веб-приложения, так как вы берете темы из пула резьбы, которые необходимы для обслуживания ваших запросов (звучит, как вы получаете хорошее количество трафика).
Вы также отправляете с помощью писем с синкраусом, что означает, что нить используется намного больше, чем нужно, если вы продолжите использовать этот подход ThreadPool, я бы предложил очевидку их в службе IIS SMTP (посмотрите на System.net .Mail.smtpclient.deliverymethod), который просто записывает файл в папку очередей, которая контролируется службой SMTP IIS.
Но на самом деле вы должны рассмотреть возможность перемещения этого в службу Windows.