所有.net程序集在Windows Server上运行非常慢
本文关键字:运行 非常 Server Windows net 程序集 所有 | 更新日期: 2023-09-27 18:02:30
我已经将非常简单的c#代码编译成。net exe
汇编:
using System;
class Program
{
public static void Main()
{
Console.WriteLine("test");
}
}
编译后的程序集每次在我的桌面Windows 8.1
机器上运行大约0.02
秒,但在生产Windows Server 2012 R2
机器上运行1.05
秒。
这是我用测试的PowerShell:
$sw = [Diagnostics.Stopwatch]::StartNew()
for ($i=1; $i -le 10; $i++)
{
.'cs.exe
}
$sw.Stop()
$sw.Elapsed
我的本机的输出:
TotalMinutes : 0.00391715666666667
TotalSeconds : 0.2350294
TotalMilliseconds : 235.0294
。. NET版本:
PSChildName Version
----------- -------
v2.0.50727 2.0.50727.4927
v3.0 3.0.30729.4926
Windows Communication Foundation 3.0.4506.4926
Windows Presentation Foundation 3.0.6920.4902
v3.5 3.5.30729.4926
Client 4.5.51641
Full 4.5.51641
Client 4.0.0.0
服务器的输出:
TotalMinutes : 0.172228565
TotalSeconds : 10.3337139
TotalMilliseconds : 10333.7139
。. NET版本:
PSChildName Version
----------- -------
Client 4.5.51650
Full 4.5.51650
Client 4.0.0.0
服务器环境变量:
Name Value
---- -----
ALLUSERSPROFILE C:'ProgramData
APPDATA C:'Users'*********'AppData'Roaming
CLIENTNAME *********
CommonProgramFiles C:'Program Files'Common Files
CommonProgramFiles(x86) C:'Program Files (x86)'Common Files
CommonProgramW6432 C:'Program Files'Common Files
COMPUTERNAME *********
ComSpec C:'Windows'system32'cmd.exe
COR_ENABLE_PROFILING 7
COR_PROFILER {8019fee9-9590-4bd4-b2c9-815628f80f0f}
CORECLR_ENABLE_PROFILING 0
FP_NO_HOST_CHECK NO
HOMEDRIVE C:
HOMEPATH 'Users'*********
JAVA_HOME C:'Progra~1'Java'jdk1.8.0_45
LOCALAPPDATA C:'Users'*********'AppData'Local
LOGONSERVER ''*********
NUMBER_OF_PROCESSORS 12
OS Windows_NT
Path C:'ProgramData'Oracle'Java'javapath;C:'Windows'system32;C:'Windows;C:'Windows'System3...
PATHEXT .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
PROCESSOR_ARCHITECTURE AMD64
PROCESSOR_IDENTIFIER Intel64 Family 6 Model 63 Stepping 2, GenuineIntel
PROCESSOR_LEVEL 6
PROCESSOR_REVISION 3f02
ProgramData C:'ProgramData
ProgramFiles C:'Program Files
ProgramFiles(x86) C:'Program Files (x86)
ProgramW6432 C:'Program Files
PSModulePath C:'Users'*********'Documents'WindowsPowerShell'Modules;C:'Program Files'WindowsPow...
PUBLIC C:'Users'Public
SESSIONNAME RDP-Tcp#126
SystemDrive C:
SystemRoot C:'Windows
TEMP C:'Users'ACADWE~1'AppData'Local'Temp'2
TMP C:'Users'ACADWE~1'AppData'Local'Temp'2
USERDOMAIN *********
USERDOMAIN_ROAMINGPROFILE *********
USERNAME *********
USERPROFILE C:'Users'*********
windir C:'Windows
是什么导致了1秒的慢速?
是JIT编译器的问题吗?
服务器中是否有应该运行的clr相关服务?
是否有任何可以禁用的应用程序验证检查?
这个问题只发生在。net exe文件上。用c++编译的简单可执行文件运行0.01
秒
我试着运行ngen.exe ExecuteQueuedItems
在评论中建议,但没有改变。下面是命令的结果:
PS C:'Windows'system32> C:'Windows'Microsoft.NET'Framework'v4.0.30319'ngen.exe ExecuteQueuedItems
Microsoft (R) CLR Native Image Generator - Version 4.0.30319.33440
Copyright (c) Microsoft Corporation. All rights reserved.
All compilation targets are up to date.
我找到问题了。
似乎服务器安装了dotMemory
还设置了以下环境变量:
COR_ENABLE_PROFILING 7
COR_PROFILER {8019fee9-9590-4bd4-b2c9-815628f80f0f}
CORECLR_ENABLE_PROFILING 0
在卸载dotMemory并删除这些环境变量之后,一切都如预期的那样工作(每个c#应用程序运行0.02
秒)