asp.net ThreadPool - длительная операция

Моим приложением является 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 машине) я вижу, что приложение работает намного медленнее.

  1. Существует ли лучший способ написать этот код?
  2. Если я использую ThreadPool. QueueUserWorkItem или создают новый поток с помощью Потока t = новый поток (новый ThreadStart (DoWork));?
  3. Будет лучше создать полностью отдельное приложение в целях отправки новостных рассылок. это поможет если плохо запущенный это приложение на той же машине?

Я видел другие сообщения, здесь говоря о ThreadPool по сравнению с Потоком, но кажущийся никто не уверен, который лучше.

5
задан oers 13 April 2012 в 06:42
поделиться

3 ответа

В порядке предпочтения:

  1. Создайте другое приложение. Windows Service будет хорошим выбором
  2. Использование Thread T = New Thread (новый ThreadStart (Dowork));
  3. Ваша текущая реализация
3
ответ дан 14 December 2019 в 13:36
поделиться

Выезд из ASP.NET будет хорошим выбором. Это может быть простой приложение командной строки, которое вы запускаете из командной строки. Зачем вам нужен сервис или он должен быть размещен как URL?

2
ответ дан 14 December 2019 в 13:36
поделиться

Да, я думаю, вы должны переместить это из вашего веб-приложения, так как вы берете темы из пула резьбы, которые необходимы для обслуживания ваших запросов (звучит, как вы получаете хорошее количество трафика).

Вы также отправляете с помощью писем с синкраусом, что означает, что нить используется намного больше, чем нужно, если вы продолжите использовать этот подход ThreadPool, я бы предложил очевидку их в службе IIS SMTP (посмотрите на System.net .Mail.smtpclient.deliverymethod), который просто записывает файл в папку очередей, которая контролируется службой SMTP IIS.

Но на самом деле вы должны рассмотреть возможность перемещения этого в службу Windows.

1
ответ дан 14 December 2019 в 13:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: