【发布时间】:2021-02-24 03:20:04
【问题描述】:
我知道我不应该在 foreach 中声明 Func<>,但我想知道这段 C# 代码是否会增加进程内存并导致内存泄漏?
class Foo {
int[] FooA = { 1, 2, 3, 4 };
string result = "";
void myMethod() {
FooA.ToList().ForEach(a => {
Func<int, string> myFunc = myFuncVar => $"Value: {myFuncVar}\n";
result += myFunc(a);
});
MessageBox.Show(result);
}
}
【问题讨论】:
-
不会有内存泄漏,因为
myFunc没有离开作用域并且没有人引用它。在给定的情况下,myFunc将被收集到 gen0(最频繁的收集)中,因此内存开销最小 -
@JL0PD 你的意思是如果我用其他方法调用
myMethod(),不会有任何内存泄漏? -
您对“我不应该在
foreach中声明Func<>”的理由是什么?我不知道一个,所以想知道......(显然在这种特殊情况下它是无用的,但完全可以预期minimal reproducible example 严格说明问题并且不包含额外代码,如本文所示......所以你可能有其他原因) -
@TCPW01,是的。但是,如果您想要确切的代码,最好使用
string.Join -
.NET 等托管框架本身没有内存泄漏。 IE。您可以“打包老鼠”并填充一堆您将永远不会在某处再次使用的引用并以这种方式浪费内存。但是您永远不会忘记对内存管理器无法摆脱的内存块的引用。
标签: c# memory-leaks func