当前位置:  开发笔记 > 编程语言 > 正文

为什么.NET没有像Soft一样的SoftReference和WeakReference?

如何解决《为什么.NET没有像Soft一样的SoftReference和WeakReference?》经验,为你挑选了2个好方法。

我真的很喜欢WeakReference.但我希望有一种方法可以告诉CLR多少(比如说,在1到5的范围内)你认为参考的程度有多弱.那将是辉煌的.

Java有SoftReference,WeakReference,我相信第三种类型称为"幻像引用".这就是那里的3个级别,GC在决定该对象是否获得切割时具有不同的行为算法.

我正在考虑对.NET的WeakReference进行子类化(幸运的是,并且稍微有点不好意思,它没有密封)来创建一个基于到期计时器或其他东西的伪SoftReference.



1> 小智..:

我认为NET没有软引用的根本原因是因为它可以依赖具有虚拟内存的操作系统.Java进程必须指定其最大OS内存(例如,有-Xmx128M),并且它永远不会占用更多的OS内存.而NET进程不断地占用它所需的操作系统内存,而当操作系统耗尽时,操作系统会提供磁盘支持的虚拟内存.如果.NET允许软引用,那么.NET运行时将不知道何时释放它们,除非它深入到操作系统以查看其内存是否实际在磁盘上分页(一个令人讨厌的OS/CLR依赖),或者它要求运行时指定最大进程内存占用量(例如等效值-Xmx).我想微软不想添加-Xmx到.NET,因为他们认为操作系统应该决定每个进程获得多少RAM(通过选择在RAM或磁盘上保存哪些虚拟内存页),而不是进程本身.



2> barneypitt..:

Java SoftReferences用于创建内存敏感的缓存(它们不用于其他目的).

从.NET 4开始,.NET有一个类System.Runtime.Caching.MemoryCache,它可能满足任何这样的需求.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有