2016-11-23 51 views
2

我目前使用這種方法很慢,它完美的作品:的Process.Start是

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

然後我嘗試了另一臺計算機上和它的工作也有,但它是非常緩慢的(更是一分鐘打開我的郵件編輯器!)。
我調試了Process.Start(在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需要一段時間。特別是如果你有插入到Outlook中的插件。 –

+0

沒有指定程序,* shell *必須在註冊表中找到合適的程序。那裏可能會有不一致,從而導致速度減慢。 – MrPaulch

回答

0

謝謝你的回答&評論。

這裏一個小更新的問題和可能解決方案(我還沒有完全確定什麼問題了): 我可以重現的問題我測試我的部門的每一個計算機(而不是隻有兩個如我的問題所述)。幾天後,我注意到一切都恢復正常。我沒有更改我的程序代碼,也沒有停用防病毒軟件。

我沒有在我的問題中提到過(我認爲這不重要),是所有電腦都是新的。我認爲這可能是問題所在:Windows有一個索引服務,我可以想象,在開始時,可​​能需要幾天時間才能掃描整個計算機。在這種情況下,搜索默認郵件管理器可能需要很長時間,但索引服務完成其工作後,搜索默認郵件管理器的速度又會變得很快。

0

你可能不會找到這個非常令人滿意的答案。

在我看來,您通過shell啓動mailto: URL的原始代碼應該優於修改後的代碼,該代碼將假設某個特定的郵件客戶端。不要專門開始outlook.exe。不保證此過程可用或可位於任何機器上。

至於糟糕表現:

「然後,我嘗試在另一臺計算機上...」

從這一個單一的測試,你似乎認爲你的程序將大多數機器運行速度很慢,因此您需要更改某些內容。我會說這個結論爲時過早。首先,在其他幾臺機器上測試。

  • 只有當你的假設被驗證,你需要改變你的代碼(即使你真的沒有任何可行的替代你的原代碼恕我直言)。
  • 如果事實證明,您嘗試使用您的程序的另一臺機器比其他機器要慢,那麼它可能只是配置不正確,而不是您的程序負責解決該事實的責任。