Постоянная загрузка 50% процессоров указывает на то, что одно из двух ваших процессорных ядер застряло в бесконечном цикле. Однако опубликованное вами тело метода не может быть источником этого бесконечного цикла. Я предлагаю посмотреть на другие части вашего кода для решения проблемы. Ваше приложение перестает отвечать на запросы, когда загрузка процессора составляет 50%?
Кроме того, почему вы меняете System.Net.ServicePointManager.MaxServicePointIdleTime? Я никогда не видел, чтобы это использовалось, и если вам это не нужно, не используйте его.
Наконец, это скорее субъективная точка зрения на стиль, но я буду утверждать, что вложенные if, которые вы используете, менее понятны и труднее для чтения, чем альтернативные структуры. Я лично считаю, что проверка предварительных условий в верхней части метода, без вложенных условий, намного чище:
public void Send()
{
if(string.IsNullOrEmpty(this.Server))
{
throw new PreferenceNotSetException("Server not set");
}
if(string.IsNullOrEmpty(this.From))
{
throw new PreferenceNotSetException("E-Mail address not set.");
}
if(string.IsNullOrEmpty(this.To))
{
throw new PreferenceNotSetException("Recipients E-Mail address not set.");
}
using(System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage(this.From, this.To, this.Subject, this.FormattedText))
{
message.IsBodyHtml = true;
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(this.Server);
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
try
{
client.Send(message);
}
catch(System.Exception ex)
{
//Put this in for debugging only.
System.Windows.Forms.MessageBox.Show(ex.ToString());
}
}
}