【转】托管资源VS非托管资源 控件VS组件
托管资源:从文字上看就是托付给别人管理,就像.NET的CLR,java的jvm
非托管资源:直接和os打交道,不知道这么说合理不?
控件和组件的区别,贴一段:
一般把Control翻译成控件,把Component翻译成组件。
控件就是具有用户界面的组件。要说的具体一点,就得回顾早期 Windows 的历史根源,当时控件指任何子窗口——按钮、列表框、编辑框或者某个对话框中的静态文本。从概念上讲,这些窗口——控件——类似用来操作收音机或小电器的旋钮和按钮。随着控件数量的增加(组合框、日期时间控件等等),控件逐渐成为子窗口的代名词,无论是用在对话框中还是用在其它种类的主窗口中。没过多久 BASIC 程序员开始编写他们自己专用的控件,自然而然地人们便想到共享这些控件。共享代码的方法之一是通过磁盘拷贝,但那样显然效率低下。必须要有一种机制使开发者建立的控件能够在其它程序员的应用中轻而易举地插入,这便是VBA控件,OLE控件,OCX和最后ActiveX 控件的动机。
这就是控件和组件之间产生混淆之所在。因为为了解决控件的可复用问题,所有这些技术必须首先解决更为一般的组件重用问题。(COM,如果你还记得它的话,意思是组件对象模型)。在软件行话中,组件这个术语指任何可复用的对象或任何可与其它对象交互的代码体。子程序的发明,曾经一度成为程序员趋之若鹜的软件工程圣杯:一种统一的编程理论,它使程序员从基本构建块——也就是用所选语言编写的各种组件建立大型系统。从子程序演变到OOP,到DLLs,再到COM,再到.NET框架的每一种新的编程范例都代表了一种不同的提供可重用性的方案。VBX使用DLLs的固化名称。COM使用接口和IUnknown。.NET框架使用微软的中间语言(MSIL)层和公共语言运行时(CLR)来提供统一的粘合。
因此,控件是组件的一个主要样本(并且历史上曾驱动着组件的开发),控件又不仅仅是唯一的一种组件。组件不需要显示任何信息或用户界面。组件可能实现科学计算,收集性能数据,计算1971年1月1日到现在的毫秒数,仰或是读取布什总统竞选活动保险箱里的美金数。
托管资源是指由CLR管理分配和释放的资源,一般是托管内存,而非托管资源是由系统分配和释放的资源
一般地在CLR里new 一个对象或者分配一个数组都不需要手动去释放内存,
而如windows里的句柄资源常常需要手动释放,如字体、刷子、DC等
所有的Window内核对象(句柄)都是非托管资源,如文件句柄、套接字句柄、窗体句柄。。。太多了
new出来的对象占用的内存是托管资源。
补充:
应该说“托管”一词是和.net概念一起出生的,我们都知道以前的开发工具无论是Delphi、VB编译出的dll或exe文件都是二进制文件,可以被操作系统直接识别。而微软为了和JAVA火拼,实现跨平台的目的,就提出了.net概念,大道理不说了(书上都有),简单点说就是提出了一套中间语言(IL),然后让程序编译后生成中间语言文件,再通过自己的CLR去翻译、管理,那么我们就说CLR“托管”了,开句玩笑,它不管谁管啊。“非托管”就是CLR管不了的,楼上的都说了。
控件,就是组件,顾名思义,可控的组件,所以一般也就指所见即所得的可视组件。组件是什么,参见楼上意见。
非托管资源:直接和os打交道,不知道这么说合理不?
控件和组件的区别,贴一段:
一般把Control翻译成控件,把Component翻译成组件。
控件就是具有用户界面的组件。要说的具体一点,就得回顾早期 Windows 的历史根源,当时控件指任何子窗口——按钮、列表框、编辑框或者某个对话框中的静态文本。从概念上讲,这些窗口——控件——类似用来操作收音机或小电器的旋钮和按钮。随着控件数量的增加(组合框、日期时间控件等等),控件逐渐成为子窗口的代名词,无论是用在对话框中还是用在其它种类的主窗口中。没过多久 BASIC 程序员开始编写他们自己专用的控件,自然而然地人们便想到共享这些控件。共享代码的方法之一是通过磁盘拷贝,但那样显然效率低下。必须要有一种机制使开发者建立的控件能够在其它程序员的应用中轻而易举地插入,这便是VBA控件,OLE控件,OCX和最后ActiveX 控件的动机。
这就是控件和组件之间产生混淆之所在。因为为了解决控件的可复用问题,所有这些技术必须首先解决更为一般的组件重用问题。(COM,如果你还记得它的话,意思是组件对象模型)。在软件行话中,组件这个术语指任何可复用的对象或任何可与其它对象交互的代码体。子程序的发明,曾经一度成为程序员趋之若鹜的软件工程圣杯:一种统一的编程理论,它使程序员从基本构建块——也就是用所选语言编写的各种组件建立大型系统。从子程序演变到OOP,到DLLs,再到COM,再到.NET框架的每一种新的编程范例都代表了一种不同的提供可重用性的方案。VBX使用DLLs的固化名称。COM使用接口和IUnknown。.NET框架使用微软的中间语言(MSIL)层和公共语言运行时(CLR)来提供统一的粘合。
因此,控件是组件的一个主要样本(并且历史上曾驱动着组件的开发),控件又不仅仅是唯一的一种组件。组件不需要显示任何信息或用户界面。组件可能实现科学计算,收集性能数据,计算1971年1月1日到现在的毫秒数,仰或是读取布什总统竞选活动保险箱里的美金数。
托管资源是指由CLR管理分配和释放的资源,一般是托管内存,而非托管资源是由系统分配和释放的资源
一般地在CLR里new 一个对象或者分配一个数组都不需要手动去释放内存,
而如windows里的句柄资源常常需要手动释放,如字体、刷子、DC等
所有的Window内核对象(句柄)都是非托管资源,如文件句柄、套接字句柄、窗体句柄。。。太多了
new出来的对象占用的内存是托管资源。
补充:
应该说“托管”一词是和.net概念一起出生的,我们都知道以前的开发工具无论是Delphi、VB编译出的dll或exe文件都是二进制文件,可以被操作系统直接识别。而微软为了和JAVA火拼,实现跨平台的目的,就提出了.net概念,大道理不说了(书上都有),简单点说就是提出了一套中间语言(IL),然后让程序编译后生成中间语言文件,再通过自己的CLR去翻译、管理,那么我们就说CLR“托管”了,开句玩笑,它不管谁管啊。“非托管”就是CLR管不了的,楼上的都说了。
控件,就是组件,顾名思义,可控的组件,所以一般也就指所见即所得的可视组件。组件是什么,参见楼上意见。

浙公网安备 33010602011771号