写点什么

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

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

关注

评论

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

金融信创爆发年!袋鼠云数栈DTinsight全线产品通过信通院信创专项测试

袋鼠云数栈

【接入指南 之 云云接入】快速接入HONOR Connect平台(上)

荣耀开发者服务平台

IoT 新手指南 万物互联 荣耀 honor

武汉链(基于ETH)BSN官方DDC链上数据解析

BSN研习社

区块链

你的数据是如何泄露的?企业和个人应该这样做……

火绒安全

安全漏洞 数据泄露 黑客攻击

一张图,理清微服务架构路线(收藏)

C++后台开发

微服务 微服务架构 Linux服务器开发 C/C++后台开发 C/C++开发

PHP 项目对接视频号原来如此简单,小白也能轻松完成【带附件】

CRMEB

招生报名小程序开发笔记二:功能需求设计

CC同学

DTMO直播预告|Taier的Web前端架构解析

袋鼠云数栈

2022年了,你还不会手撕轮播图?

知心宝贝

JavaScript 算法 前端 可视化 签约计划第三季

IDC:阿里云位居2021年中国关系型数据库市场第一

Lily

当科学家决定搞点“花里胡哨”的东西

图灵教育

直播预告 | Authing 如何打造云原生 SaaS 产品架构?

Authing

基于开源大数据调度系统Taier的Web前端架构选型及技术实践

袋鼠云数栈

2022-08微软漏洞通告

火绒安全

microsoft 终端安全 安全漏洞

开源一夏 | jQuery scroll() 滚动加载列表 获取腾讯云图片像素信息

六月的雨在InfoQ

开源 COS ​jQuery 8月月更

黄东旭,TiDB的灵魂骑手,和他的叛逆“问答”

B Impact

实时云渲染——让元宇宙从科幻走入现实

Finovy Cloud

云渲染 GPU渲染

数据资产为王,解析企业数字化转型与数据资产管理的关系

袋鼠云数栈

离线数仓建设,企业大数据的业务驱动与技术实现丨03期直播回顾

袋鼠云数栈

Apache APISIX 在微软云 ARM 和 x86 服务器上的性能测试对比

API7.ai 技术团队

API网关 APISIX 微软云

一步一图带你深入剖析 JDK NIO ByteBuffer 在不同字节序下的设计与实现

bin的技术小屋

网络编程 Netty nio Java Concurrency java nio

元宇宙|高阶音频处理能力,让声音「声临其境」

融云 RongCloud

音视频技术

招生报名小程序开发笔记三:数据库设计

CC同学

袋鼠云数栈基于CBO在Spark SQL优化上的探索

袋鼠云数栈

阿里内部流出的绝密文档JDK源码学习笔记(2022版)限时分享

Java工程师

Java 源码 jdk

云图说丨初识云速建站服务

华为云开发者联盟

云计算 网站 华为云 搭建网站

走好数据中台最后一公里,为什么说数据服务API是数据中台的标配?

袋鼠云数栈

如何读取redis的手机号验证码数据,实现自动化登录测试

Liam

程序员 测试 自动化测试 测试开发 测试自动化

招生报名小程序开发笔记一:开发背景和技术方案的选型确定

CC同学

编译器优化:何为SLP矢量化

华为云开发者联盟

开发 编译器 SLP

实时开发平台建设实践,深入释放实时数据价值丨04期直播回顾

袋鼠云数栈

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