[英]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.