写点什么

C#和 Visual Basic 中的闭包与对象生存时期

  • 2007-06-23
  • 本文字数:592 字

    阅读完需:约 2 分钟

C# 2 和即将发布的 VB 9 都允许开发者在匿名方法中引用局部变量。若某匿名方法中引用了某个变量,则该局部变量将被提升为实例变量,并储存于一个叫做闭包(closure)的对象中。提升之后,即使创建该变量的方法执行完毕退出,该变量仍不会消亡。

当指向该匿名函数的所有引用都消失后,该闭包变量即可正常地被垃圾回收器回收。注意到前一句中的“匿名函数”是复数形式(原文为 anonymous functions——译者注)——因为同一个作用域中所有的匿名函数都共享了一个闭包。 Eric Lippert 说这个问题并没有受到足够的关注:

不过,对于同一个作用域中所有的匿名函数都共享了一个闭包的做法,我却没有看到任何人提到过这样会存在问题。虽然这样的设计在语义和概念上都比较容易理解(也比较容易实现),但在垃圾收集方面,这样的做法却有可能导致潜在的问题。

Eric Lippert 在 Blog 中还给出了例子:程序中创建了两个匿名函数,存活时间较短的函数很快即可执行完毕,而存活时间较长的函数则需要一段时间。

假设存活时间较短的委托持有着较为重要稀缺的资源。但是因为作用域中只有一个闭包,所以存活时间较短和较长的两个委托都持有着这同一个闭包。因此只有在两个委托都消亡后,该闭包才能够被垃圾回收。这样,即使那个存活时间较长的委托中并没有使用到该稀缺资源,该资源也只能在存活时间较长的委托结束后才能被释放!

查看英文原文: Closures and Object Lifetime in C# and Visual Basic

2007-06-23 02:131425
用户头像

发布了 37 篇内容, 共 10.4 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

支持多模型数据分析探索的存算分离湖仓一体架构解析(下)

星环科技

湖仓一体

【获奖案例巡展】信创先锋之星——中信证券基于国产图数据库构建企业图谱的应用实践

星环科技

国产数据库

什么是存算分离架构?

星环科技

存算分离

火山引擎DataTester智能发布平台:智能化A/B实验,助力产品快速迭代

字节跳动数据平台

大数据 AB testing实战 A/B 测试 企业号 4 月 PK 榜

用C++编写一个简单的发布者和订阅者

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 4 月 PK 榜

火山引擎 DataLeap 下 Notebook 系列文章三:架构升级详解

字节跳动数据平台

大数据 架构 数据治理 运维‘ 企业号 4 月 PK 榜

分析型数据库:分布式分析型数据库

星环科技

分析型数据库

【获奖案例巡展】科技向善之星——中航电梯5G+大数据管理平台

星环科技

大数据管理

算法题每日一练:连续子数组的最大和

知心宝贝

数据结构 算法 前端 后端 三周年连更

支持多模型数据分析探索的存算分离湖仓一体架构解析(上)

星环科技

湖仓一体

厦门等保备案平台是哪个?多久可以办好?

行云管家

等保备案 厦门

c4d R2023 让您的三维动画设计更简单~~

真大的脸盆

Mac Mac 软件 三维动画设计 动画设计工具

CutMix&Mixup详解与代码实战

华为云开发者联盟

人工智能 华为云 数据增强 华为云开发者联盟 企业号 4 月 PK 榜

华为云联合多家单位正式开源云原生多沙箱容器运行时Kuasar

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

【Python实战】Python采集大学教务系统成绩单

BROKEN

三周年连更

Spring Cloud Stream:打造强大的微服务事件驱动架构

Java 微服务 spring cloud stream

高性能、快响应!火山引擎ByteHouse物化视图功能及入门介绍

字节跳动数据平台

大数据 数据仓库 云原生 Clickhouse 企业号 4 月 PK 榜

内蒙农信携手星环科技建设农信大数据平台,激活金融业务创新

星环科技

数据要素流通

屌的一批!阿里P8推荐的Spring Cloud实战笔记

小小怪下士

Java 微服务 SpringCloud

临沂等级保护测评机构有几家?在哪里?

行云管家

等保 等级测评 临沂

超级App的构建与技术驱动

没有用户名丶

【获奖案例巡展】信创先锋之星——甘肃省住房和城乡建设厅住建数据大脑

星环科技

数据超脑

Flink 2.0 启航,开启全新篇章

Apache Flink

大数据 flink 实时计算

灵活、快捷、低运维成本的数据集成方法:数据联邦架构

星环科技

数据集成 数据联邦结构

共建清洁能源岛!华为中国数字能源旗舰峰会海南站盛大举行

极客天地

软件测试/测试开发丨Docker 容器技术与常用命令

测试人

Docker 软件测试 自动化测试 测试开发

SBOM喊话医疗器械网络安全:别慌,我罩你! Part Ⅰ

安势信息

网络安全 SBOM 医疗器械 SBOM应用

最佳实践|如何写出简单高效的 Flink SQL?

Apache Flink

大数据 flink 实时计算

【获奖案例巡展】信创先锋之星——浙江省某市区视频能力中心

星环科技

大数据

C#和Visual Basic中的闭包与对象生存时期_.NET_Jonathan Allen_InfoQ精选文章