写点什么

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

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

关注

评论

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

低代码选型,论协同开发的重要性

葡萄城技术团队

0经验拿下大厂年薪30万Offer,我的面试求职之路(含面试题)~

霍格沃兹测试开发学社

建议收藏!数据可视化大屏设计必备步骤

葡萄城技术团队

经常会采坑的javascript原型应试题

loveX001

JavaScript 前端

社招前端二面面试题总结

loveX001

JavaScript 前端

深入理解JS作用域链与执行上下文

loveX001

JavaScript

阿里云云通信风控系统的架构与实践

阿里云CloudImagine

云计算 云通信

如何实现文件高速传输,推荐镭速高速文件传输解决方案

镭速

测试开发 | Dubbo 接口测试技术,测试开发进阶必备(附源码)

霍格沃兹测试开发学社

React的useLayoutEffect和useEffect执行时机有什么不同

beifeng1996

前端 React

用ChatGPT优化AI绘画提示词的探索

Baihai IDP

人工智能 AI AIGC ChatGPT

Python 基础练习题(三)

漫步桔田

工业数字孪生:西门子工业网络与设备虚拟调试案例(TIA+MCD+SINETPLAN)

工赋开发者社区

和狂飙的 ChatGPT 聊聊软件开发的现在与未来

极狐GitLab

DevOps 研发效能 DevSecOps 极狐GitLab ChatGPT

ChatGPT专题 | 万字长文解析!复现和使用GPT-3/ChatGPT,你所应该知道的

工赋开发者社区

如何使用 Kubernetes 实现应用程序的弹性伸缩

API7.ai 技术团队

Prometheus api 网关 APISIX Serverless Kubernetes

2023前端二面vue面试题

bb_xiaxia1998

Vue 前端

MegEngine 使用小技巧:使用 Netron 实现模型可视化

MegEngineBot

深度学习 开源 MegEngine Netron 模型可视化

NFTScan x TiDB丨一栈式 HTAP 数据库为 Web3 数据服务提供毫秒级多维查询

PingCAP

TiDB

前端react面试题(边面边更)

beifeng1996

前端 React

React循环DOM时为什么需要添加key

beifeng1996

前端 React

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战——实践类

阿里云AIoT

数据库 监控 物联网 存储 消息中间件

用户属性-MQTT 5.0新特性

EMQ映云科技

物联网 IoT mqtt 企业号 2 月 PK 榜 用户属性

百度前端一面高频react面试题指南

beifeng1996

前端 React

逃离同质化,OPPO折叠屏正在笃定远一点的未来

脑极体

OPPO 折叠屏

每日一题之请描述Vue组件渲染流程

bb_xiaxia1998

Vue 前端

每日一题之Vue的异步更新实现原理是怎样的?

bb_xiaxia1998

Vue 前端

最佳的18个JAVASCRIPT前端开发框架和库

2D3D前端可视化开发

web前端 Javascript框架 前端开发框架 webgl库 javascript库

LeetCode题解:89.格雷编码,归纳法,详细注释

Lee Chen

JavaScript LeetCode

美团前端常见面试题整理

loveX001

JavaScript 前端

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