簡體   English   中英

從非靜態 class Z240AA2CEC4B29C56F3BEE520ADCEE7E 中的 static 方法中的對象釋放 memory 塊

[英]Releasing memory blocks from objects in static methods inside a non-static class c#

I'm making use of an static method inside a non-static class,each time that static method is called, a new instance of an object is created

       public  class BaseMethodsExecuter<T> where T:class
        {
            public static T Execute(BaseMethodsParams input, BaseBusinessEnum businessEnum) 
            {
                T data=null; 
                try
                {
                  data = ExecuteMethod(input, businessEnum);
                }
                catch (Exception ex)
                {
    
                }
                return data;
            }
            private static T ExecuteMethod(BaseMethodsParams input, BaseBusinessEnum businessEnum)
            {
              // this is the line that fell me to thinking 
                var TypeMethod = typeof(BaseDataAbstract<T>).Assembly.GetTypes().Single(t => t.BaseType==(typeof(BaseDataAbstract<T>)) && !t.IsAbstract && ((BaseDataAbstract<T>)Activator.CreateInstance(t)).BaseBusinessMethod== businessEnum);
                var BaseMethod=(BaseDataAbstract<T>)Activator.CreateInstance(TypeMethod);
                var data=BaseMethod.GetBaseData(input);
                return data;
            }
        }

以下代碼在 static 方法中創建 object

((BaseDataAbstract<T>)Activator.CreateInstance(t))

據我所知, Static objects將其 memory 塊保存在 memory 的stack部分中。 是不是意味着每次調用這個方法都會有一個額外的空間用於實例化的 object 被占用,再也不會被釋放了?

如何從 memory 中清除 static 方法中的對象?

第一:參考Object存放在堆中。 指向此 object 的所有引用指針都存儲在堆棧中。 當堆棧中沒有更多指針時,object 將從堆中移除(參見垃圾收集器)。

That being said: A static object is static reference pointer in the heap to an object in the stack, for that reason the object never gets disposed. 在您的示例(((BaseDataAbstract<T>)Activator.CreateInstance(t)).BaseBusinessMethod== businessEnum); 創建一個實例,但該實例未分配給 static 變量。 同樣適用於var BaseMethod=(BaseDataAbstract<T>)Activator.CreateInstance(TypeMethod); ,它們被分配給ExecuteMethod內的范圍變量。 一旦我們跳出方法,這些變量(棧)就會消失,而堆中的引用對象也會在 GC 處理它們時消失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM