惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Hackread – Cybersecurity News, Data Breaches, AI and More
W
WeLiveSecurity
C
Check Point Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Vulnerabilities – Threatpost
GbyAI
GbyAI
A
Arctic Wolf
NISL@THU
NISL@THU
N
Netflix TechBlog - Medium
The Register - Security
The Register - Security
M
MIT News - Artificial intelligence
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Microsoft Security Blog
Microsoft Security Blog
Cyberwarzone
Cyberwarzone
C
CERT Recently Published Vulnerability Notes
T
Tenable Blog
G
GRAHAM CLULEY
O
OpenAI News
S
Schneier on Security
Google Online Security Blog
Google Online Security Blog
Vercel News
Vercel News
宝玉的分享
宝玉的分享
Attack and Defense Labs
Attack and Defense Labs
T
The Blog of Author Tim Ferriss
量子位
aimingoo的专栏
aimingoo的专栏
The Cloudflare Blog
P
Privacy & Cybersecurity Law Blog
S
SegmentFault 最新的问题
MongoDB | Blog
MongoDB | Blog
Apple Machine Learning Research
Apple Machine Learning Research
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
LINUX DO - 热门话题
博客园_首页
F
Full Disclosure
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Docker
U
Unit 42
A
About on SuperTechFans
博客园 - 司徒正美
Hacker News - Newest:
Hacker News - Newest: "LLM"
人人都是产品经理
人人都是产品经理
Application and Cybersecurity Blog
Application and Cybersecurity Blog
G
Google Developers Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
J
Java Code Geeks
云风的 BLOG
云风的 BLOG
Scott Helme
Scott Helme
TaoSecurity Blog
TaoSecurity Blog

博客园 - draeag

Linux下c++通过动态链接库调用类 环境变量设置 linux下获取时间差 gcc / g++ 编译选项 常用软件 MAC IP等相关 union内存分配方案 颜色表示 我看各平台的界面呈现 常用开发工具 委托与事件 [转载]HTTP协议详解 Get和Post方法的区别 Windows DNA .NET 运行原理之CLR WPF之长短 COM, DCOM, COM+ , DTC, MSMQ,.NET Remoting,WCF COM线程模型概要 通信相关类
.NET Framework/CLR之长短
draeag · 2012-02-11 · via 博客园 - draeag

CLR的各方面简直是无可挑剔的。但可能正是因为CLR太好了,让微软从2003年开始,对unmamanged world的投资就不大了。

  为了争取企业客户,全力推广CLR是最正确的做法。毕竟绝大多数的程序员,一辈子都是和数据库,和UI代码打交道。你总不能让他们一辈子都用C去管理内容,创建窗口句柄吧。CLR的性能也很有竞争力,与之对应的编程语言和开发工具也非常给力,每个新版本都带来长足进步。但是,这些再好,也无法掩饰一个悖论: 要用C#写出性能可以和C++一个数量级的程序,不是不可能,而是花费的代价往往比直接用C++写更大。这里面有很多原因,比如系统最底层的API还是unmanaged的,通过CLR作interop的性能损失无法忽略。比如用C#的话,程序员的控制力很弱,从工具和语言层面上很难对性能精雕细作,一不注意就box/unbox了。比如JIT编译器为了实现自己的安全模型和异常处理,每次访问成员函数的都是都要生成代码确认this指针是否为空。这个世界上还是有很多程序,是需要对性能做严格控制的。在CLR高速发展的几年中,对应的系统平台,Win32 API, C++开发工具,只有完善性的改善,并没有重大突破。这个问题对Windows平台本身影响不大,但如果寄希望于在移动设备上,大家都指着C#来开发,就有点天方夜谭了。这样的失衡,使得微软在移动设备和消费者产品这两个严重需要unmanaged和系统投入的领域缓慢发展了很长时间。

unmanaged 非托管的

interop  Visual Studio .NET 通过引入面向CLR(Common Language Runtime 通用语言运行时)的托管代码概念,使开发人员在创建和运行应用程序的方式上有了重大改变。托管代码提供了包括自动内存管理、基于属性的编程和公共类型系统等在内的许多优点。不幸的是,正是这些功能强大、独树一帜的特性也使得它与以往基于 Windows API 和 COM 对象的编程有了本质区别。虽然 Visual Studio .NET 也在尽力使得使用和创建非托管代码容易一些,但有些情况下使用非托管代码是很困难的。 让受管代码对象和非受管对象协同工作的过程称为互用性(interoperability),通常简称为 interop。