- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有 C++ 背景,使用 C# 已有大约一年的时间。像许多其他人一样,我对为什么确定性资源管理没有内置到语言中感到困惑。我们有处置模式,而不是确定性的析构函数。 People start to wonder通过他们的代码传播 IDisposable 癌症是否值得付出努力。
在我偏爱 C++ 的大脑中,使用带有确定性析构函数的引用计数智能指针似乎是垃圾收集器的重要一步,垃圾收集器要求您实现 IDisposable 并调用 dispose 来清理非内存资源。不可否认,我不是很聪明……所以我问这个纯粹是为了更好地理解为什么事情是这样的。
如果 C# 被修改为:
对象是引用计数的。当对象的引用计数变为零时,将对该对象确定性地调用资源清理方法,然后将该对象标记为垃圾收集。垃圾收集发生在未来某个不确定的时间,此时内存被回收。在这种情况下,您不必实现 IDisposable 或记住调用 Dispose。如果有非内存资源需要释放,就实现资源清理功能即可。
编辑:从目前的评论来看,这是个坏主意,因为
我认为第一个是有效的,但第二个使用弱引用很容易处理。
速度优化是否超过了您的缺点:
如果您的资源清理机制是确定性的并且内置于语言中,您就可以消除这些可能性。
最佳答案
Brad Abrams 发布 an e-mail from Brian Harry在开发 .Net 框架期间编写。它详细说明了未使用引用计数的许多原因,即使早期的优先事项之一是与使用引用计数的 VB6 保持语义等价。它研究了一些可能性,例如计算某些类型的引用而不计算其他类型(IRefCounted
!),或计算特定实例的引用,以及为什么这些解决方案都不被认为是可接受的。
Because [the issue of resourcemanagement and deterministicfinalization] is such asensitive topic I am going to try tobe as precise and complete in myexplanation as I can. I apologize forthe length of the mail. The first 90%of this mail is trying to convince youthat the problem really is hard. Inthat last part, I'll talk about thingswe are trying to do but you need thefirst part to understand why we arelooking at these options.
...
We initially started with theassumption that the solution wouldtake the form of automatic refcounting (so the programmer couldn'tforget) plus some other stuff todetect and handle cyclesautomatically. ...we ultimately concluded thatthis was not going to work in thegeneral case.
...
In summary:
- We feel that it is very important to solve the cycle problemwithout forcing programmers tounderstand, track down and designaround these complex data structureproblems.
- We want to make sure we have a high performance (both speed andworking set) system and our analysisshows that using reference countingfor every single object in the systemwill not allow us to achieve thisgoal.
- For a variety of reasons, including composition and castingissues, there is no simple transparentsolution to having just those objectsthat need it be ref counted.
- We chose not to select a solution that provides deterministicfinalization for a singlelanguage/context because it inhibitsinterop with other languages andcauses bifurcation of class librariesby creating language specificversions.
关于c# - 为什么在 C# 中没有引用计数 + 垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/867114/
引用网址 http://hi.baidu.com/quiteuniverse/blog/item/9f3f043d46ad1e07bba16716.html 以下函数调用方式:&nbs
我什至不确定如何描述我正在尝试做的事情,因为我对 cookie 了解不多,但就这样吧。 是否可以使用PHP从浏览器缓存中收集一个cookie(或cookie文件),将其保存到数据库中,然后清除缓存并重
我正在使用 Room(v. 2.2.1)和协程支持(v. 1.3.2)并进行以下设置 @Entity(tableName = "simple_table") data class SimpleEnti
我正在尝试编写一个基于时间运算符收集/累积值的规则。 rule "Zone6 Overlap" when $i1 : Instance ($e1 : event == " Vel : 20.9
我有一个简单的 BST,定义了节点结构: struct node { int key_value; struct node *left; struct node *right; }; ty
我有这个对象: public class MenuPriceByDay implements Serializable { private BigDecimal avgPrice; p
我正在开发一个应用程序,需要访问给定传感器的“最后 5 秒有值(value)的数据”。我的计划是以某种方式存储这些数据,然后当我请求数据时,它将返回最近 5 秒内获得的所有数据。鉴于以下情况,我不确定
在 Ruby 中,您可以对数组使用 map/collect 方法来修改它: a = [ "a", "b", "c", "d" ] a.collect! {|x| x + "!" } a
我即将开始实时收集大量数字数据(对于那些感兴趣的人,各种股票和 future 的出价/要价/最后或“磁带”)。稍后将检索数据以进行分析和模拟。这一点都不难,但我想高效地做到这一点,这会带来很多问题。我
我提出这个问题是为了寻求有关如何设计系统的实用建议。 像 amazon.com 和 pandora 这样的网站拥有并维护着庞大的数据集来运行他们的核心业务。例如,亚马逊(以及所有其他主要电子商务网站)
假设我们有一个数据数组和另一个带索引的数组。 data = [1, 2, 3, 4, 5, 7] index = [5, 1, 4, 0, 2, 3] 我们想从 index 的 data 元素创建一个
好的,我已经阅读了几个关于它的主题,但现在就开始吧。假设我有一个应用程序,基本上我会时不时地点击一个按钮,几分钟内会发生很多事情,然后它可能会再闲置一个小时,或者可能只是 1 分钟。难道不是在整个结束
我有一个数据框,例如 Seq Chrm start end length score 0 A C1 1 50 49 12 1 B
我正在考虑在 Object[] 数组中收集泛型方法的所有方法参数以进行记录。我知道使用方面可以更好地实现这一点,但是我不允许使用它,并且如果可能的话我正在寻找一种基于纯反射的方法 为了澄清, 假设一个
快速提问: 如果 Socket 对象(及其本地缓存的 InputStream 和 OutputStream 对象)超出范围并被垃圾收集,连接是否在 JVM 中保持打开状态? (即,不会在监听服务器上抛
是否有用于收集 facebook 公共(public)数据作为实时提要的 API。我阅读了关于用于收集数据的公共(public)提要 API,但我现在不能申请,而且它不是免费的,还有 Open str
摘要 :我使用自定义收集器收集给定搜索的所有命中的文档 ID(它使用 ID 填充 BitSet)。根据我的需要,搜索和获取文档 ID 的速度非常快,但是当涉及到从磁盘实际获取文档时,事情变得非常缓慢。
我正在寻找一种方法来从自定义 Gradle 插件收集给定项目的所有依赖约束(通过常规 platform 和/或 enforcedPlatform 和/或“手动”强制执行)。 在 Maven 世界中,您
我有一个 CSV 格式的用户列表,但我需要按广告中的名称从每个用户收集 SamAccount 属性。 CSV 模型 脚本 Get-ADObject -Filter 'ObjectClass -eq "
我得到了一个非常大的列表,其中包含大约 200 个带有文本和图像的项目。 ng-repeat 是一种缓慢渲染的方式。它尝试过这个 solution 。效果很好。但不适合重复收集。 我的网络服务返回此:
我是一名优秀的程序员,十分优秀!