在非静态方法中使用静态成员会导致内存泄漏吗?

Does using a static member inside a non-static method cause memory leakage?

DoSomething()方法会导致内存泄漏吗?

public static class AppContext
{
   public static int ApplicationStateId {get; set} 
   ...
} 
public class MyService
{
     public void DoSomething()
     {
        ....
        if(AppContext.ApplicationStateId == 1) 
        {
             //do something
        } 
     }
}

var service = new MyService();
service.DoSomething();

This means that static variables and everything they reference will never be garbage collected.

Michael 在 8 Ways You can Cause Memory Leaks in .NET 中说。

这里没有“泄漏”;这只是预期的行为。是的,任何可通过静态字段访问的内容都不会被 GC 收集,但就某种全局状态而言,这通常是正确的。对于“泄漏”,我们通常指的是 意外或无法解释的 内存保留。最常见的场景是静态 events,这听起来是个好主意,但可以很容易地让长期冗余对象的整个片段保持活动状态。例如:

SomeType.SomeStaticEvent += obj.HandleTheThing;

现在意味着来自 obj 的对象现在被永久保留(或者至少直到委托被明确地从事件中删除),并且 obj 可以看到的任何东西:现在被保留永远等等


在问题中显示的情况下, 甚至没有任何对象 - 只是一个整数。我认为您不需要担心在应用程序域的持续时间内保留整数的成本,特别是如果您的应用程序域 要求 在持续时间内知道该整数.

我会更关心诸如并发性之类的事情——这是否意味着“多个当前用户站”,或者低级别的细节,比如字段的波动性和寄存器使用。