2016-11-23 3 views
2

настоящее время я использую этот метод, и он прекрасно работает:Process.Start очень медленно

public static void CreateEmailInDefaultMailEditor(string to, string subject, string body) 
{ 
    Process.Start($"mailto:{to}?subject={subject}&body={body}");   
} 

Затем я попробовал его на другом компьютере, и его также работает там, но это очень медленно (более, что одна минута, чтобы откройте мой почтовый редактор!).
Я отладил метод Process.Start (in System.dll) и выяснил, что проблема была в конце метода NativeMethod.ShellExecuteEx, который работает очень медленно.

Я также заметил, что указав название программы, которая должна открыть для отправки электронной почты

public static void CreateEmailInOutlook(string to, string subject, string body) 
{ 
    Process.Start("outlook.exe", $"mailto:{to}?subject={subject}&body={body}");   
} 

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

Так что вопрос довольно прост: зачем это поведение и как его обходить?

+1

Тенденции к тому, чтобы дать вредоносное ПО. Поэтому временно отключите его и повторите попытку, чтобы узнать, является ли он виновником. –

+0

Соглашаясь с Хансом, ручное начинание с любого установленного AV занимает некоторое время. Особенно, если у вас есть плагины, которые интегрируются в Outlook. –

+0

Без указания программы, * shell * должен найти соответствующий в реестре. Там могут быть несоответствия, которые замедляют работу. – MrPaulch

ответ

0

Благодарим за ответы & комментариев.

Вот небольшое обновление к вопросу и вероятно решение (я до сих пор не совсем уверен, что проблема была): я мог воспроизвести проблему на каждые компьютеры моего отдела я проверил (а не только два как упоминалось в моем вопросе). Через несколько дней я заметил, что все снова работает. Я не изменял код своей программы и не деактивировал антивирус.

Что я не упоминал в своем вопросе (я думал, что это не важно), все компьютеры были новыми.И я думаю, что это может быть проблемой: в Windows есть служба индексирования, и я могу себе представить, что в начале это может занять несколько дней, пока весь компьютер не будет отсканирован. Поиск почтового менеджера по умолчанию в этом случае может занять много времени, но как только служба индексирования выполнила свою работу, поиск почтового менеджера по умолчанию выполняется быстрее.

0

Возможно, вы не найдете этот ответ очень удовлетворительным.

На мой взгляд, ваш исходный код, который запускает URL-адрес mailto: через оболочку, должен быть более предпочтительным по сравнению с пересмотренным кодом, в котором делается предположение о конкретном почтовом клиенте. Не начинайте конкретно outlook.exe. Нет никакой гарантии, что этот процесс доступен или может быть расположен на любой машине.

Как плохой производительности:

«Затем я попробовал его на другом компьютере ...»

Из этого одного теста, вы, кажется, сделать вывод о том, что ваша программа будет медленно запускайте на самых машинах, отличных от ваших, и что вам поэтому нужно что-то изменить. Я бы сказал, что вывод преждевременен. Во-первых, проверьте несколько других машин.

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