gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:08:07 25 4
gpt4 key购买 nike

在 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

最佳答案

检查您正在运行的内容,多个正在运行的进程意味着您可能会有很长的延迟,请关闭您正在运行的所有应用程序(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);
}

这段代码(我机器上的所有应用程序都已关闭)在 < 300 毫秒内执行了每个 SetEnvironmentVariable 调用。此外,请考虑使用 EnvironmentVariableTarget.Process,因为它比为整台机器设置变量更快。

根据 Environment 类来源(可以找到 here,第 864 行),在设置用户/机器范围环境变量后,它调用 native 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

关于c# - 通过 Winform 应用程序创建环境变量,非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8739043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com