.net JIT编译器以不同的方式优化控制台应用程序和Web API的代码

cuxqih21  于 2023-05-19  发布在  .NET
关注(0)|答案(1)|浏览(119)

我只是在Web API和控制台应用程序中以发布模式编译简单的代码,我得到了不同的结果
Web API

var builder = WebApplication.CreateBuilder(args);

WeatherForecast _weatherForecast = new WeatherForecast();
_weatherForecast = null;

builder.Services.AddControllers();

控制台应用程序

WeatherForecast weatherForecast = new WeatherForecast();
weatherForecast = null;

然后,我只是检查了这些dll使用ILSpy工具,看到完全不同的结果。对于控制台应用程序,JIT编译器删除了weatherForecast = null,但对于Web API,它仍然存在。因此,这意味着在控制台应用程序中将引用类型变量设置为null以提前为GC提供一些帮助是没有意义的

kkbh8khc

kkbh8khc1#

JIT编译器删除了控制台应用程序中的weatherForecast = null行,但在发布模式下编译时将其保留在Web API中。虽然在控制台应用程序中预先将引用类型变量设置为null似乎没有意义,但通常对于垃圾收集来说是不必要的。NET垃圾回收器有效地处理内存管理,而无需显式的空值分配。

相关问题