| |
首页 淘股吧 股票涨跌实时统计 涨停板选股 股票入门 股票书籍 股票问答 分时图选股 跌停板选股 K线图选股 成交量选股 [平安银行] |
股市论谈 均线选股 趋势线选股 筹码理论 波浪理论 缠论 MACD指标 KDJ指标 BOLL指标 RSI指标 炒股基础知识 炒股故事 |
商业财经 科技知识 汽车百科 工程技术 自然科学 家居生活 设计艺术 财经视频 游戏-- |
天天财汇 -> 设计艺术 -> C#如此设计完善的语言,为什么要搞个多播委托这样失败的设计? -> 正文阅读 |
|
[设计艺术]C#如此设计完善的语言,为什么要搞个多播委托这样失败的设计? |
[收藏本文] 【下载本文】 |
犹如白纸上一颗扎眼的黑点 并且每一个匿名函数闭包lambda 都是一个臃肿异常的多播委托 多播委托这个设计缺陷 在c#本身设计比较完备的情况下 更是非… |
其实如果你真的做过正经的客户端/游戏开发,就会知道这些场景其实多播委托才应该是默认的,因为你需要用委托的地方几乎都需要做成多播的。 举个例子,unreal 拿 C++ 开发游戏,放着函数指针不用却代码里满天飞 DECLARE_DYNAMIC_MULTICAST_DELEGATE,而这些全是多播委托。 而 .NET 最开始的主要应用场景就是客户端,做出默认多播这种决策出来其实也不难理解,只不过在20多年后的今天,客户端之外的开发场景多了起来了,于是才发现把多播委托做成默认行为的这种设计存在问题。 不过好消息有三个: 一个是 .NET 的委托走的是 immutable 的设计,因此委托对象一但创建就不能修改(+= 其实是调用 Delegate.Combine 创建了一个新的委托对象),所以 runtime 知道你的委托到底是不是多播的。于是现在的 .NET 对单播情况有专门的优化会走更快的调用代码,调用时几乎没有额外开销,性能跟 interface 方法调用没啥区别。 另一个是现在在 PGO 的加持下能够把委托调用直接 inline 掉从而直接把调用开销归零。 最后一个是 .NET 10 开始支持委托的逃逸分析,哪怕在捕获了局部变量创建了闭包的情况下也能直接把委托对象的创建给优化掉,从而让委托能从创建到调用都变成 0 开销的。 送礼物 还没有人送礼物,鼓励一下作者吧 |
我不知道你为啥对委托有这么深的怨念,虽然我也曾对多播委托的设计颇有微词,但也不至于想你的问题描述那样形容“犹如白纸上一颗扎眼的黑点”、“臃肿异常”、“非常扎眼”。 如果你现在的心态是曾经的我,那么我会选择跟自己和解,放下精神洁癖,选择相信JIT大法。 请你相信,凭借JIT所掌握的运行时信息,对于没有绑定多个方法的委托,JIT会直接把委托优化成函数指针。如果目标方法是一个简单的方法,JIT甚至直接通过方法内联优化掉委托。所谓的内存占用问题也好,多级跳转也罢,实际上是不存在的。你可以做压力测试看看,拿数据说话。 |
我不同意C# 设计完善一说,它的版本更新非常频繁,可以说世间罕有,何来设计完善一说,年年都有新功能的东西,实际 情况只能是 臃肿,但好在它性能被重视,并且性能潜在空间也比较大,有clike 的支持; 这个委托是C# 1。0版本的东西,有些问题在所难免, C# 之所以给人一种 设计好,简单的假象 完全是因为它的使用体验长期保持一个比较好的水准有关,因为它是高度与ide配合的,并且强类型语言,从一开始C# 的宣传主要卖点就是它的所谓易用性,和开发体验。但实际上现在大部分语言开发起来差不多,只要ide支持跟得上大差不差; 所以这些都不是重点 重点是性能好才行。 |
想起一个知乎用户,mono还是momo,你是他吗? |
你是mono吗 |
|
[收藏本文] 【下载本文】 |
设计艺术 最新文章 |
如何评价未明子讽刺那位想要开画展的青年? |
如何理解书法中的“取神弃形”? |
C#如此设计完善的语言,为什么要搞个多播委 |
孙莉跳舞为什么总是感觉不太对呢? |
如何评价杨少华的捧哏水平? |
为什么山水集团明知道孙连城的爱好,却不送 |
真正打动过你的一个设计是什么? |
有什么适合2月29号发的文案? |
有哪些你收藏过的朋友圈好文案? |
为什么游戏设计师可以设计出让人上瘾的游戏 |
上一篇文章 下一篇文章 查看所有文章 |
|
|
股票涨跌实时统计 涨停板选股 分时图选股 跌停板选股 K线图选股 成交量选股 均线选股 趋势线选股 筹码理论 波浪理论 缠论 MACD指标 KDJ指标 BOLL指标 RSI指标 炒股基础知识 炒股故事 |
网站联系: qq:121756557 email:121756557@qq.com 天天财汇 |