写点什么

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:131377
用户头像

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

关注

评论

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

信创 CDC 实战|国产数据库的数据高速通道:OceanBase 实时入仓 StarRocks

tapdata

Tapdata 实时数据同步 oceanbase数据同步 starrocks数据同步 数据入仓

弥合 AI 学习与实践鸿沟:咕泡科技九年演进中的专家团服务体系升级

咕泡科技

人工智能

西南会议 | 2025 Altair 区域技术交流会下周五成都,日程+演讲阵容+惊喜好礼全面公布!

Altair RapidMiner

人工智能 AI 仿真 CAE AI驱动工程

Spring Boot 启动优化实践

不在线第一只蜗牛

Spring Boot

基于运营商数据的用户关系模型建立示例

天翼云开发者社区

大数据 关系模型

打破 996 魔咒,重塑软件开发

飞算JavaAI开发助手

什么是内网穿透?如何实现无公网IP远程访问?

贝锐

内网穿透

HarmonyOS Development Practice: Basic Services Kit 构建教育基础服务平台

bianchengyishu

HarmonyOS NEXT

DApp 开发大揭秘:智能合约的神奇魔力

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 公链开发代币开发

鸿蒙开发实战:Data Protection Kit 构建教育数据全生命周期防护体系

bianchengyishu

HarmonyOS NEXT

电子制造智能化转型:MES如何解决工艺复杂、质量追溯与供应链协同

万界星空科技

mes 万界星空科技mes 电子电器制造业 电子电器行业 电子行业mes

Trino 可观测性最佳实践

观测云

trino

Layer2 互操作时代:构建无缝体验的链间未来

NFT Research

blockchain web3 layer2

鸿蒙开发笔记:Asset Store Kit 实现教育资源共享平台

bianchengyishu

HarmonyOS NEXT

全球AI盛会丨亮点揭秘!3大会场,20+热点议题:AI 技术如何工程设计、仿真与制造赋能

Altair RapidMiner

AI 制造业 数字孪生 仿真 CAE

AI重塑生产逻辑,华为云数智领航会释放AI与产业融合新价值

极客天地

ManageEngine卓豪简化变更管理的工作方法(一)

ServiceDesk_Plus

变更管理 ManageEngine卓豪

老项目改造、定制开发太难搞?那是你没用对方法

飞算JavaAI开发助手

我在618主场,和3位顶尖技术博士聊了聊

京东零售技术

BeeWorks免费版正式上线!

BeeWorks

即时通讯

11Labs 增长负责人分享:企业级市场将从消费级或开发者切入丨Voice Agent 学习笔记

声网

博大数据精彩亮相2025中国国际金融展,全栈解决方案赋能金融数字化升级

极客天地

鸿蒙开发实战:Connectivity Kit 构建校园智能物联网络

bianchengyishu

HarmonyOS NEXT

Kyutai 开源 STT 模型,支持流式传输;AI 虚拟角色桌面设备 Dipal D1:会动、会说话、会回应你丨日报

声网

从“烟囱式监控”到观测云平台:2025 亚马逊云科技峰会专访

观测云

亚马逊云科技中国峰会

HarmonyOS Development Practice: Car Kit 构建智慧校车管理系统

bianchengyishu

HarmonyOS NEXT

产品更新丨谷云科技 iPaaS 集成平台 V7.5 版本更新

谷云科技RestCloud

API 网关 集成平台 ipaas MCP

鸿蒙开发实战:Crypto Architecture Kit 构建教育数据安全体系

bianchengyishu

HarmonyOS NEXT

效果&成本双突破!快手提出端到端生成式推荐系统OneRec!

快手技术

推荐算法 大模型 快手

n8n教程:5分钟部署+自动生AI日报并写入飞书多维表格

阿星AI工作室

人工智能 前端 后端

一文读懂:当下最热门的 DApp 开发模式全解析

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 公链开发代币开发

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