网站大量收购闲置独家精品文档,联系QQ:2885784924
  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CCLI简介

C++/CLI 简介 1. 简介 本文并不是为了奉承 C++/CLI 的辉煌,也不是为了贬低其它如 C#或者 VB.NET 等语言,相反,这只是一个 非官方的、以一个喜欢这种语言的非微软雇员身份来论证 C++/CLI 有它的自己的唯一的角色,可作为第一流 的.NET 编程语言。 一个不断在新闻组和技术论坛上出现的问题是,当象 C#和 VB.NET 这样的语言更适合于这种用途时,为什 么要使用 C++来开发.NET 应用软件。通常这样一些问题后面的评论说是,C++语法是怎样的复杂和令人费解, C++现在是怎样一种过时的语言,还有什么 VS.NET 设计者已不再像支持 C#和 VB.NET 一样继续支持 C++。其 中一些猜疑是完全荒谬的,但有些说法部分正确。希望本文有助于澄清所有这些围绕 C++/CLI 语言及其在 VS.NET 语言层次中的地位的疑惑,神秘和不信任。请记住,本作者既不为微软工作也没有从微软那里取得报酬, 只是想从技术上对 C++/CLI 作一评判。 2. 快速简洁的本机 interop 除了 P/Invoke 机制可用在另外的象 C#或 VB.NET 这样的语言外,C++提供了一种独有的 interop 机制,称 作 C++ interop 。C++ interop 比 P/Invoke 直观得多,因为你只是简单地#include 需要的头文件,并与需要的库 进行链接就能象在本机 C++中一样调用任何函数。另外,它比 P/Invoke 速度快--这是很容易能证明的。现在, 可争辩的是在实际应用软件的开发中,经由 C++ interop 获得的性能好处与花在用户接口交互、数据库存取、网 络数据转储、复杂数学算法等方面的时间相比可以被忽略,但是事实是在有些情况下,甚至通过每次 interop 调 用节省的几个纳秒也能给全局应用程序性能/ 响应造成巨大影响,这是绝对不能被忽视的。下面有两部分代码片 断(一个是使用 P/Invoke 机制的 C#程序,一个是使用 C++ Interop 机制的 C++程序),我分别记录了其各自代码 重复执行消耗的时间(毫秒)。不管你如何解释这些数据,不管这会对你的应用程序产生什么影响,全是你的事。 我仅打算事实性地指出,C++代码的执行速度要比 C#(其中使用了较多的本机 interop 调用)快。 1) C#程序(使用 P/Invoke) [SuppressUnmanagedCodeSecurity] [DllImport(kernel32.dll)] static extern uint GetTickCount(); [SuppressUnmanagedCodeSecurity] [DllImport(kernel32.dll, SetLastError = true, CharSet = CharSet.Auto)] static extern uint GetWindowsDirectory( [Out] StringBuilder lpBuffer, uint uSize); static void Test(int x) { StringBuilder sb = new StringBuilder(512); for (int i = 0; i x; i++) GetWindowsDirectory(sb, 5 ); } static void DoTest(int x) { uint init = GetTickCount(); Test(x); uint tot = GetTickCount() - init; Console.WriteLine(Took {0} milli-seconds for {1} iterations,tot, x); } static void Main(string[] args) { DoTest(50000);DoTest(500000);DoTest(1000000);DoTest(5000000); Console.ReadKey(true); } 2) C

文档评论(0)

jgx3536 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档