Проверка того, что у вас запущено, несколько запущенных процессов означают, что вы можете иметь длительную задержку, закрыть все запущенные приложения (Chrome, IE, Notepad и т. Д.) И запустить приложение, чтобы узнать, сколько времени это займет.*
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 мс.Также рассмотрите возможность использования <code>EnvironmentVariableTarget.Process, так как это будет быстрее, чем установка переменной для всей машины.
В соответствии с источниками класса Environment (можно найти здесь , строка 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 .
- Кредит Дмитрию