在Winform应用程序中,我创建了一些环境变量(Windows 7)。创作有效,但速度非常慢,大约9秒创建一个。
我使用此代码:
Environment.SetEnvironmentVariable(
variableName,
value,
EnvironmentVariableTarget.Machine
);
这很奇怪,不是吗?
查看日志:
5/01/2012 08:22:09 : MyVar1
5/01/2012 08:22:18 : MyVar2
5/01/2012 08:22:26 : MyVar3
答案 0 :(得分:1)
检查您运行的是什么,多个正在运行的进程意味着您可能会有很长的延迟,关闭您正在运行的所有应用程序(Chrome,IE,记事本等)并运行应用程序以查看需要多长时间。
for (int i = 0; i < 5; i++)
{
stopwatch.Restart();
Environment.SetEnvironmentVariable(
"Variable " + i,
i.ToString(),
EnvironmentVariableTarget.Machine);
Console.WriteLine(stopwatch.ElapsedMilliseconds + " Variable:" + i);
}
这段代码(关闭我机器上的所有应用)执行&lt; SetEnvironmentVariable
中的每个EnvironmentVariableTarget.Process
调用300毫秒。另外,考虑使用IntPtr r = Win32Native.SendMessageTimeout(
new IntPtr(Win32Native.HWND_BROADCAST),
Win32Native.WM_SETTINGCHANGE,
IntPtr.Zero,
"Environment",
0,
1000,
IntPtr.Zero);
,因为它比为整个机器设置变量更快。
根据Environment类源(可以找到here,第864行),在设置用户/机器范围环境变量之后,它调用本机SendMessageTimeout函数来通知任何进程有关环境的变化。这是摘录:
{{1}}
因此,任何收件人都需要1000毫秒(1秒)的超时来处理邮件。例如。如果其中5个未能处理它,则可能有5秒的延迟。有关SendMessageTimeout的更多信息,请参见MSDN。
- 归功于Dmitry