作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 ASP.Net Core 2.1
, C#
应用。我正在使用 Clr 堆分配分析器
https://marketplace.visualstudio.com/items?itemName=MukulSabharwal.ClrHeapAllocationAnalyzer
其中一种方法如下所示
例#1
public void ConfigureServices(IServiceCollection services) {
services.AddSingleton<IPocoDynamo>(serviceProvider => {
var pocoDynamo = new PocoDynamo(serviceProvider.GetRequieredService<IAmazonDynamoDB>());
pocoDynamo.SomeMethod();
return pocoDynamo;
});
public async Task<EventTO> AddEvent(EventTO eventObj)
{
try
{
throw new Exception("Error!");
}
catch (Exception ex)
{
Logger.Log(ex, eventObj);
return null;
}
}
new
关键字的东西,它是警告
HAA0502 Explicit new reference type allocation
Warning HAA0301 Heap allocation of closure Captures:
最佳答案
堆分配分析器 用于标记您的代码执行的所有分配。这不是您希望一直使用的:考虑以下愚蠢的代码
public static string MyToString(object? o)
{
if (o == null)
throw new ArgumentNullException(nameof(o)); // HAA0502 here
return o.ToString() ?? string.Empty;
}
分析器会以警告的形式发出 HAA0502 作为标记行上的信息,告诉您正在分配一个新实例。现在,在这种情况下您在做什么很明显,这是一个微不足道的警告,但分析器的目的是帮助您发现可能使您的代码变得更慢的讨厌的分配。
public static void Test1()
{
for (int i = 0; i < 100; i++)
{
var a = i + 1;
var action = new Action(
() => // HAA0301 Heap allocation of closure Capture: a
{
Console.WriteLine(a);
}
);
action();
}
}
除了 HAA0502 将被标记在
new Action(
上因为我们正在创建一个新对象,所以 lambda 上有一个额外的警告:
HAA0301 .这就是分析器变得更有用的原因:这里分析器告诉您运行时将创建一个包含您捕获的变量
a
的新对象。 .如果您不熟悉这一点,您可能会认为该代码被转换成这样的东西(仅用于解释目的):
private sealed class Temp1
{
public int Value1 { get; }
public Temp1(int value1)
{
Value1 = value1;
}
public void Method1()
{
Console.WriteLine(Value1);
}
}
public static void Test1()
{
for (int i = 0; i < 100; i++)
{
var a = i + 1;
var t = new Temp1(a);
t.Method1();
}
}
在后面的代码中,很明显每次迭代都在分配一个对象。
关于c# - HAA0502 显式新引用类型分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58138603/
我想在 mp3 中添加旋转 3d 效果(哈斯效果)。我的意思是,当通过耳机收听时,音频似乎会周期性地从左到右改变其方向,反之亦然(如下所示)。为此,我在网上搜索并尝试通过以下方式实现: 首先,我想,如
我是一名优秀的程序员,十分优秀!