写点什么

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

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

关注

评论

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

OpenAI发布新旗舰模型GPT-4o!UI设计师的又一AI设计神器来了!

彭宏豪95

人工智能 设计 UI 插件 AIGC

Intel HDSLB 高性能四层负载均衡器 — 快速入门和应用场景

云物互联

云计算 负载均衡 网络

工作卷,是主动选择还是迫于无奈?

王中阳Go

golang 微服务 面试题 大厂面经 Go进阶

OpenHarmony公开课 - 开发者手机OTA升级适配

Laval小助手

GPT5 如何使用?GPT5 如何订阅?GPT5 功能全面详解

蓉蓉

人工智能 openai GPT ChatGPT

淘宝开放平台API接口:淘宝店铺订单列表接口丨淘宝店铺订单详情接口丨淘宝店铺订单物流接口

tbapi

淘宝店铺订单接口 淘宝店铺订单详情接口 淘宝店铺订单物流接口

淘宝API实时接口:淘宝店铺所有商品数据接口丨天猫店铺所有商品数据

tbapi

淘宝API接口 淘宝店铺所有商品数据接口 天猫店铺所有商品数据接口

揭秘接口测试:为何它是你软件质量的守门人?

测试人

软件测试

鸿蒙HarmonyOS实战-ArkUI组件(Canvas)

蜀道山

鸿蒙 架构 HarmonyOS 鸿蒙系统 鸿蒙 Ability

银行核心背后的落地工程体系丨混沌测试的场景设计与实战演练

PingCAP

数据库 开源 分布式 TiDB

多点 Dmall x TiDB:出海多云多活架构下的 TiDB 运维实战

PingCAP

数据库 分布式 TiDB 多云

什么是正向控制,反向控制?

玄兴梦影

正向控制 反向控制

鸿蒙HarmonyOS实战-ArkUI动画(布局更新动画)

蜀道山

鸿蒙 架构 HarmonyOS 鸿蒙系统 鸿蒙 Ability

线上展厅是什么?和传统展厅相比有什么区别和优势?

点量实时云渲染

云展厅 3D展厅 线上展厅

腾讯面试:什么锁比读写锁性能更高?

王磊

PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来

PingCAP

数据库 分布式 TiDB

Pandabuy VS Wegobuy 淘宝代购系统

tbapi

淘宝代购系统 Pandabuy wegobuy

越来越真的Deepfake再次引起网安界的关注

芯盾时代

人工智能 网络安全

地理数据可视化的神奇组合:Python和Geopandas

华为云开发者联盟

Python 数据可视化 华为云 华为云开发者联盟 企业号2024年5月PK榜

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