写点什么

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

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

关注

评论

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

MES系统怎么实现车间管理中的生产计划和排产计划

万界星空科技

工业互联网 生产管理系统 mes 万界星空科技 万界星空科技mes

专业强大的扫描仪软件:VueScan Pro中文激活版

胖墩儿不胖y

Mac软件 扫描工具 扫描仪

如何鉴别LED电子显示屏好坏

Dylan

质量 评估 电子 LED显示屏

企业财务团队如何进行转型升级?

智达方通

全面预算管理 财务团队 财务转型

数据库的下一场革命:S3 延迟已降至原先的 10%,云数据库架构该进化了

小猿姐

数据库 云计算 Kubernetes

KubeWharf:推动云原生技术发展的未来之路

Miracle.

#云原生 #技术人的2023总结 KubeWharf

测试开发 | 人工智能目标检测

测吧(北京)科技有限公司

测试

IPQ6018 and IPQ6000 series: highlighting differences and superior advantages

wallysSK

深入理解云原生基础:Docker和Kubernetes的核心概念与应用

Miracle.

#云原生 #技术人的2023总结

企业门户平台全功能解析:从界面到集成,一站式管理与整合

天津汇柏科技有限公司

企业 统一门户

交易所开发:中心化加密货币交易所发展的关键考虑因素实现数字交易

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

深入云原生—基于KubeWharf深度剖析-以公司实际应用场景为例深度解读

申公豹

KubeWharf

制造业数字化转型的核心不止是技术

万界星空科技

数字化转型 工业互联网 mes 万界星空科技mes

云安全资源管理定义以及实现方法

行云管家

云计算 云服务 云安全 云资源

揭秘抖音视频详情API:电商行业的制胜法宝与实时数据获取的奥秘

Noah

Prompt Tuning:大模型微调的实战技巧

百度开发者中心

深度学习 大模型 Prompt

共建共享,创新同行!飞桨星河社区助力大模型时代开发者砥砺前行

飞桨PaddlePaddle

人工智能 开发者 WAVE SUMMIT

云图说丨初识华为云边缘安全——为加速域名保驾护航

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 华为云云图说

测试开发 | 深度解析人工智能特征提取

测吧(北京)科技有限公司

测试

实时数据获取:抖音API在电商中的应用与影响

Noah

万德高科携手航天科技AIRIOT打造智慧能碳管理平台, 助力碳达峰碳中和

AIRIOT

数字化转型 智慧系统 能碳管理

测试开发 | 探索人工智能图像生成的奇妙世界

测吧(北京)科技有限公司

测试

从容器的发展历史理解容器的本质

华为云开发者联盟

云计算 云原生 后端 华为云 华为云开发者联盟

Wireshark网络工具

小齐写代码

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