通过Winform应用程序创建环境变量,非常慢

时间:2012-01-05 07:30:53

标签: c# winforms environment-variables

在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

1 个答案:

答案 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