写点什么

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

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

关注

评论

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

Docker下Java文件上传服务三部曲之二:服务端开发

程序员欣宸

Java Docker 5月月更

在云平台 ABAP 编程环境上编写第一段 ABAP 程序

汪子熙

云计算 云原生 SAP abap 5月月更

LinkedList 源码分析-删除

zarmnosaj

5月月更

活动预告 | 博云容器云产品族发布会,来了!

BoCloud博云

容器云 活动预告

Wallys/QCN9074 WiFi Card/ IPQ6010/IPQ6018/ 802.11ax

wallys-wifi6

ipq6018

预约直播|阿里云CDP 产品发布会

阿里云大数据AI技术

CDP 产品发布

最优的纯文本模型?GPT-4蓄势待发

OneFlow

人工智能 模型 预测 openai

部署在Azure上的SAS Viya可为客户带来204%的投资回报率

E科讯

初始C语言

芒果酱

C语言 5月月更

抖音打击炫富违规视频:自媒体行业的底线在哪

石头IT视角

数据库连接池 -Druid 源码学习(九)

wjchenge

Druid 数据库连接池

JS Iterable object (可迭代对象)

达摩

js

代码之外:写作是倒逼成长的最佳方式

宇宙之一粟

写作 5月月更

字节跳动 CloudWeGo 官方微信公众号官宣了!

baiyutang

Go 开源 微服务 5月月更

拆分电商系统为微服务

小虾米

「架构实战营」

SocketIO の 聊天练习

空城机

socket Node 5月月更

青云云原生沙龙线上集结,找到属于你的云原生实践之路!

青云技术社区

设计模式之责任链模式

乌龟哥哥

5月月更

Wallys/2.5Gbps Ethernet Port Support OpenWRT Support:QUECTEL /RM500Q-GL&Support:

wallys-wifi6

wifi6 openwrt

SUSE Rancher v2.6.5 社区版核心功能解读

Rancher

Kubernetes k8s rancher NeuVector

这知识点真细,Python获取HTTP响应头和响应体

梦想橡皮擦

5月月更

Kubernetes 安全权限管理深度剖析

liuzhen007

k8s 5月月更

Linux环境编译单个C程序文件

Loken

音视频 5月月更

一文带你详细了解HarmonyOS折叠屏设计规范!

HarmonyOS开发者

HarmonyOS 折叠屏

Druid连接池源码阅读09

石小天

ES6 之set详解

达摩

js

LSM-Tree - LevelDb Skiplist跳表

懒时小窝

LSM树 leveldb LSM-Tree

央视新闻:北斗高精度共享单车大规模应用

江湖老铁

JVM进阶(十七)——类加载阶段解析:准备-解析-初始化

No Silver Bullet

JVM 类加载 解析 5月月更

千亿级高并发MongoDB集群在某头部金融系统中的应用及性能优化实践(上)

杨亚洲(专注MongoDB及高性能中间件)

数据库 mongodb 分布式 高性能 分布式数据库mongodb

druid源码学习九

Nick

Druid Apache Druid

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