所有.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.

所有.net程序集在Windows Server上运行非常慢

我找到问题了。

似乎服务器安装了dotMemory

还设置了以下环境变量:

COR_ENABLE_PROFILING           7
COR_PROFILER                   {8019fee9-9590-4bd4-b2c9-815628f80f0f}
CORECLR_ENABLE_PROFILING       0

在卸载dotMemory并删除这些环境变量之后,一切都如预期的那样工作(每个c#应用程序运行0.02秒)