网上有这样一种说法:如果一个实例中有个成员变量是static 类型,那么这个实例是不会被GC的。
我的问题是:
在一个单例模式中有一个方法来打开资源, 需要用到图片资源的对象通过这个单例中的OpenResource方法来得到ImageSource等资源, 这样打开的资源在能被GC吗?
代码逻辑如下:
public class ResourceLoader
{
private static ResourceLoader instance = new ResourceLoader();
private object locker = new object();
public static ResourceLoader Instance
{
get
{
return instance;
}
}
private ResourceLoader()
{
}
public T OpenResource<T>(Uri pathUri)
// where T : DependencyObject
{
// logic code.
}
}
我的理解是,静态变量在逻辑上是中断的,也就是说它是可以独立存在的,而GC都是基于一定的逻辑分析判断出该内存数据是否还会被使用到,所以它也就无法判断静态变量是否还会被使用,因此不能被GC!完毕。
纯属个人理解,欢迎拍砖!
ResourceLoader 被加载的时候创建,程序结束销毁。
GC 的条件是