产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

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

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

关注

评论

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

博睿数据蝉联中国APM市场份额第一,Bonree ONE春季正式版重磅发布

博睿数据

可观测性 智能运维 博睿数据 ONE有引力

mysql 8.0 安装区别

追赶者

MySQL

共铸国云智领未来| 智慧医疗乘“云”而上!

天翼云开发者社区

Qz学算法-数据结构篇(表达式、递归)

浅辄

数据结构 三周年连更

面试官:什么是双亲委派模型?

做梦都在改BUG

演示视频:Jira企业微信插件邀您一起迈入移动办公时代,高效处理Jira Issue

龙智—DevSecOps解决方案

Jira 企业微信

解决流水线瓶颈、提升编码效率的五个方法(下篇)

龙智—DevSecOps解决方案

ci cicd 持续集成 CI/CD

玩转云端| 算力基础设施升级,看天翼云紫金DPU显身手!

天翼云开发者社区

面试突击:MVCC 和间隙锁有什么区别?

做梦都在改BUG

Java 面试 MVCC

Arctic 自动优化湖仓原理解析

网易数帆

数据湖 iceberg Arctic 湖仓一体

【等保测评】电力行业等保测评多久做一次?

行云管家

电力 过等保 等级测评

css-文字充电效果

格斗家不爱在外太空沉思

CSS css动画 三周年连更

小米集团Jira实战:如何在高负载状态下保持Jira性能与运行稳定

龙智—DevSecOps解决方案

开启新时代,承接新使命,开放原子开源大赛OpenHarmony创新赛正式启航!

OpenHarmony开发者

OpenHarmony

金三银四互联网大厂 Java 面试题汇总(整理版)1000+ 面试题附答案详解,最全面详细!

架构师之道

Java 程序员 面试

国外顶级架构师编写2580页DDD领域驱动设计笔记,看到内容后破防了

做梦都在改BUG

Java 架构 领域驱动设计 DDD

非常全面的 SpringBoot 保姆级笔记,面面俱到,太牛了

做梦都在改BUG

Java Spring Boot

当推荐和搜索遇上大模型,会碰撞出什么样的火花

小红书技术REDtech

推荐 搜索 小红书

数字先锋| 乘“云”之势,天翼云助力长春市妇产医院步入智慧医疗新时代!

天翼云开发者社区

校园共享电动单车的积极作用!如何投?

共享电单车厂家

共享电动车厂家 校园共享电动车 共享电动单车投放

《挪威的森林》

后台技术汇

三周年连更

Git推出大文件储存工具Git LFS,但它真的好用吗?

龙智—DevSecOps解决方案

git 版本控制 版本控制系统

小红书高时效推荐系统背后的技术升级

小红书技术REDtech

推荐 小红书

DevEco Studio 3.1 Beta新特性知多少

HarmonyOS开发者

HarmonyOS

Spring Boot定时任务@Scheduled的多线程使用

做梦都在改BUG

Java Spring Boot 多线程 Scheduled

日志服务运维观测能力,助力新零售容器化部署升级

云布道师

存储

玩转云端| 真实模拟,即压即测,天翼云息壤性能测试PTS实践大揭秘!

天翼云开发者社区

常用内核架构

天翼云开发者社区

led显示屏视频播放器的8大功能

Dylan

企业 视频 LED显示屏

从热爱到深耕,全国Top10开源软件出品人手把手教你如何做开源

华为云开发者联盟

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

创建本地yum仓库

天翼云开发者社区

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