写点什么

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

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

关注

评论

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

5 步带你入门 GaussDB (DWS) 的 GDS 导入导出

华为云开发者联盟

数据库 华为云 企业号 2 月 PK 榜 华为云开发者联盟

ArkUI新能力,助力应用开发更便捷

HarmonyOS开发者

HarmonyOS

Linux安装ElasticSearch

Geek_7ubdnf

Java elasticsearch

关于老板让我用Openresty实现的各种奇怪需求以及实现

Java openresty

软件测试/测试开发 | web自动化测试-执行 JavaScript 脚本

测试人

软件测试 自动化测试 测试开发 Web自动化测试 selenium

天翼云发布《中国医疗云建设与应用白皮书》 推动医疗数字化提质增速

极客天地

李宏伟 安警官的IP地址已经锁定你!IP地址究竟如何定位到莽村附近?

郑州埃文科技

IP地址 IP定位查询

联邦GNN综述与经典算法介绍

京东科技开发者

算法 数据 GNN 联邦算法 图场景

开源指南针发布在即:估量有尺,开源有道

kk-OSC

开源

Seal 0.4 发布:软件供应链安全洞察更上一层楼!

SEAL安全

软件供应链安全 SEAL 企业号 2 月 PK 榜

模块六作业

程序员小张

「架构实战营」

OneCode开源低代码引擎白皮书

codebee

低代码 开发工具 低代码平台 java UI

海泰方圆受邀参加中关村网信联盟会议并斩获三项殊荣

电子信息发烧客

Mac 使用brew install zsh 遇到 Error: Command failed with exit 128: git

24号工程师

brew zsh

2022年最新数据库调查报告:超八成DBA月薪过万,你拖后腿了吗?

墨天轮

MySQL 数据库 oracle 工资 dba

软件测试/测试开发 | web自动化测试-文件上传与弹框处理

测试人

软件测试 自动化测试 测试开发 Web自动化测试 selenium

GaiaX开源解读 | 表达式作为逻辑动态化的基础,我们是如何设计的

阿里巴巴文娱技术

开源 研发效能 服务端 多端开发

安全等保二级和三级哪个高?哪个费用更高?

行云管家

网络安全 信息安全 等保 等级保护 等级

Spring Security怎么从数据库加载我们的用户?

Java spring spring security

Greenfield

股市老人

使用 NGINX 在 Kubernetes 中实现多租户和命名空间隔离

NGINX开源社区

nginx NGINX Ingress Controller NGINX Kubernetes Gateway 企业号 2 月 PK 榜

政企服务机构如何进行数字化转型?

优秀

数字化转型

性能测试中获取JVM资源信息

FunTester

如何在现实场景中随心放置AR虚拟对象?

HarmonyOS SDK

HMS Core

Apache Doris 1.2.2 Release 版本正式发布

SelectDB

大数据 数据分析 OLAP 分析型数据库 数据库·

2023年新广州市等保测评机构名单看这里!

行云管家

等级保护 等保测评 广州

把盏言欢,款款而谈,当WorkPlus接入了ChatGPT机器人

BeeWorks

飞桨助力南京邮电大学智能芯片测试团队斩获“互联网+”大赛全国银奖

飞桨PaddlePaddle

paddle 芯片 大学生 飞桨 国赛

构建云边端一体的分布式云架构,软硬结合驱动边缘计算创新场景

Baidu AICLOUD

边缘计算 分布式云

海量并发低延时 RTC-CDN 系统架构设计(上)

网易云信

实时音视频 音视频开发

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