写点什么

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

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

关注

评论

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

DApp 开发:开启去中心化应用新时代

区块链软件开发推广运营

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

研发排查问题的利器:一款方法调用栈跟踪工具

京东科技开发者

Java 开发效率狂飙! 如何实现 3 小时交付项目

飞算JavaAI开发助手

惊!不会 AI 编程的 Java 程序员要失业?飞算 JavaAI 成救命稻草

飞算JavaAI开发助手

Cyber Triage 3.14 发布,带来全新用户界面、Hayabusa 集成、基线设定等功能

sysin

数字取证

内网im软件,支持企业云盘的协同办公软件推荐

BeeWorks

即时通讯 IM 私有化部署

为什么重写equals一定也要重写hashCode方法?

电子尖叫食人鱼

Java

区块链交易所开发:开启数字交易新时代

区块链软件开发推广运营

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

「组装式开发」:App开发首选方式?

FinFish

APP开发 小程序容器 小程序技术 组装式开发

深度实测:完整代码生成 VS 片段式代码,差距有多大?

飞算JavaAI开发助手

副业搞钱新风口!靠 AI 写代码,程序员创收轻松破万

飞算JavaAI开发助手

Timefold 前世今生:从 OptaPlanner 到更快更强的开源优化引擎

PeterOne

人工智能 AI 后端

AI大模型入门 (一):什么是大模型?

测试人

人工智能

探索虚拟线程:原理与实现

京东科技开发者

腾讯元宝再更新!上线“对话分组”,支持自定义回答风格

极客天地

8 大最佳开源工具助力 Web 应用开发

NocoBase

GitHub 开源 开发者 开发工具 web 开发

Nacos源码—Nacos集群高可用分析

不在线第一只蜗牛

Java 前端 服务器

Hologres x 函数计算 x Qwen3,对接MCP构建企业级数据分析 Agent

阿里云大数据AI技术

大数据 数据分析 agent hologres Qwen3

Studio 3T 2025.8 发布 - MongoDB 的终极 GUI、IDE 和 客户端

sysin

mongodb

SpringBoot3整合SpringSecurity6(三)基于数据库的用户认证

电子尖叫食人鱼

oracle Spring Boot

1688 代采系统功能深度解析:如何通过自动采集商品详情数据 API 接口实现高效运营

代码忍者

1688 API

卷哭同行!飞算 JavaAI 完整代码生成,让竞品只能望 “码” 兴叹

飞算JavaAI开发助手

英特尔与黑芝麻智能签署合作备忘录,联合发布舱驾融合平台

极客天地

企业内部IM即时通讯软件,如何解决公司安全办公问题?

BeeWorks

即时通讯IM 私有化部署 企业级应用

天翼云息壤全面升级!

天翼云开发者社区

算力 智能云 息壤

人工智能与智能合约:如何用AI优化区块链技术中的合约执行?

天津汇柏科技有限公司

智能合约 人工智能

跨链代币开发:架起区块链未来的桥梁

区块链软件开发推广运营

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

分库分表后复杂查询的应对之道:基于DTS实时性ES宽表构建技术实践

京东科技开发者

Excel百万数据高性能导出方案!

量贩潮汐·WholesaleTide

Excel

如何在PPT中嵌入字体?办公常用的PPT技巧盘点!

职场工具箱

效率工具 PPT 办公软件 字体 AI生成PPT

2025年北京最值得去的互联网公司

测试人

人工智能

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