"Object allocation: LINQ method call" 的含义

Meaning of "Object allocation: LINQ method call"

我使用 JetBrains Rider 在 C# 中进行编程。通常,Rider 会在我的代码中强调一些操作,例如下面的 list.Where LINQ 方法调用:

当我将鼠标光标放在 Where 关键字上时,它显示以下消息:

编译不会生成任何警告,Rider 本身也不会显示任何警告。但是那是什么意思呢?

因为您正在具体化集合(即 .ToList()),所以它只是通知您当您 不需要 时,将分配内存来存储新集合(即通过删除 ToList() 将其保留为 IEnumerable)

亮点来自插件,"Heap Allocations Viewer"。

这里的亮点是通知您执行分配、装箱、拆箱等的代码。

这些东西 可能 对你有意义,但通常只有在你处理非常受限的执行环境或受限的执行配置文件时,例如低内存嵌入式系统或游戏编程,如果可以的话,内存分配或垃圾收集是您想要避免的事情。

如果您真的不关心这个插件告诉您什么,您可以安全地禁用它或从 Rider 中删除它,方法是转到文件->设置->插件并搜索它。

编译器既没有警告也没有产生错误的原因是代码实际上是完全良性的并且没有问题,但是它有一些您可能想要避免的副作用来代替上述情况。