檢查你所運行,多個正在運行的進程意味着你可以有一個較長時間的延遲,關閉正在運行的所有應用程序(瀏覽器,IE瀏覽器,記事本等)並運行該應用程序以查看需要多長時間。
for (int i = 0; i < 5; i++)
{
stopwatch.Restart();
Environment.SetEnvironmentVariable(
"Variable " + i,
i.ToString(),
EnvironmentVariableTarget.Machine);
Console.WriteLine(stopwatch.ElapsedMilliseconds + " Variable:" + i);
}
這一段代碼(與我的機器上的所有應用閉合)執行的每個SetEnvironmentVariable
呼叫< 300毫秒。另外,考慮使用EnvironmentVariableTarget.Process
,因爲它會比設置整個機器的變量更快。
根據Environment類的來源(可以找到here,第864行),設置好用戶/機器範圍環境變量後,調用本地SendMessageTimeout函數來通知任何進程有關環境的變化。下面是摘錄:
IntPtr r = Win32Native.SendMessageTimeout(
new IntPtr(Win32Native.HWND_BROADCAST),
Win32Native.WM_SETTINGCHANGE,
IntPtr.Zero,
"Environment",
0,
1000,
IntPtr.Zero);
所以1000毫秒(1秒)超時被提供給任何接收方處理該消息。例如。如果其中5個未能處理它,則可能會有5秒的延遲。有關SendMessageTimeout的更多信息,請參閱MSDN。
- 感謝Dmitry
你真的需要他們或你不能讓他們在*應用程序設置* – V4Vendetta 2012-01-05 07:45:10
@ V4Vendetta是需要他們。應用程序是一種用於爲主應用程序設置環境(並將這些變量設置爲作業的一部分)的安裝程序。 – 2012-01-05 07:48:12
'[variableName]'和'[value]'的值是什麼?你在日誌之間做了什麼嗎?一些代碼會有幫助。 – 2013-05-23 05:44:39