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