【发布时间】:2020-01-28 00:28:03
【问题描述】:
我有ASP.Net Core 2.1、C# 应用程序。我正在使用 Clr 堆分配分析器
https://marketplace.visualstudio.com/items?itemName=MukulSabharwal.ClrHeapAllocationAnalyzer
其中一种方法如下所示
Ex#1
public void ConfigureServices(IServiceCollection services) {
services.AddSingleton<IPocoDynamo>(serviceProvider => {
var pocoDynamo = new PocoDynamo(serviceProvider.GetRequieredService<IAmazonDynamoDB>());
pocoDynamo.SomeMethod();
return pocoDynamo;
});
}
例如#2
public async Task<EventTO> AddEvent(EventTO eventObj)
{
try
{
throw new Exception("Error!");
}
catch (Exception ex)
{
Logger.Log(ex, eventObj);
return null;
}
}
我在整个应用程序中使用 DI。但是无论分析器在哪里找到 new 关键字的东西,它都会发出警告
HAA0502 显式新引用类型分配
在任何使用 Lambda 表达式的地方,它都会发出警告(就像在 ex#1 中一样)
Warning HAA0301 Heap allocation of closure Captures:
是什么原因造成的以及如何解决这个问题?
谢谢!
【问题讨论】:
-
我的猜测是 HAA0502 试图鼓励您使用可以缓存和重用对象的工厂方法。 HAA0301 试图警告您正在分配一个闭包对象以提供对范围比 lambda 表达式更广泛的局部变量的访问。许多采用委托的方法还允许您传入一个参数,这可能使您可以避免这种分配。
-
您能详细说明一下吗?您使用的分析器应该显示针对引用类型的每个
new语句的警告,以及(在大多数情况下)针对 lambdas 的警告。你有什么不清楚的地方?
标签: c# clr heap-memory asp.net-core-2.1