我只是在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提供一些帮助是没有意义的
1条答案
按热度按时间kkbh8khc1#
JIT编译器删除了控制台应用程序中的
weatherForecast = null
行,但在发布模式下编译时将其保留在Web API中。虽然在控制台应用程序中预先将引用类型变量设置为null似乎没有意义,但通常对于垃圾收集来说是不必要的。NET垃圾回收器有效地处理内存管理,而无需显式的空值分配。