asp.net 面试问题一天5问(二)

不论你在什么时候开始,重要的是开始之后就不要停止。

1.C#中的托管代码是什么
2.C#中的非托管代码是什么
3.IL语言如何在.NET下运行
4.什么是.net的私有程序集
5.什么是.net的共享程序集

1.C#中的托管代码是什么

托管代码(Managed Code)就是中间语言(IL)代码,在公共语言运行库(CLR)中运行。
编译器把代码编译成中间语言,当方法被调用时CLR把具体的方法编译成适合本地计算机运行的机器码,
并将编译好的机器码缓存起来,下次使用。随着程序集的运行,CLR提供各种服务:内存管理,安全管理,线程管理,垃圾回收,类型检查等等。

2.c#中的非托管代码是什么

非托管代码是直接编译成目标计算机码,在公共语言运行库环境的外部,由操作系统直接执行的代码,代码必须自己提供垃圾回收,类型检查,安全支持等服务
如需要内存 管理等服务,必须显示调用操作系统的接口,通常调用Windows SDK所提供的API来实现内存管理。
如:当项目选择名字以MFC,ATL,WIN32开头的项目类型,那个这个项目所产生的就是非托管代码。


3.IL语言如何在.NET下运行

微软中间语言(MSIL)通常简称IL.它是将.net代码转换成机器语言的一个中间的过程,它介于高级语言和基于intel的汇编语言之间的伪汇编语言。
当用户编译一个.net程序时,编译器将源代码翻译成一组可以有效地转换成本机代码且独立于CPU的指令。
当执行这些指令时,实时(JIT)编译器将它们转化为CPUT特定的代码


4.什么是.net的私有程序集

私有程序集(private assembly)是相对简单的一种程序集类型
一般附带在某些软件上,并且也只能用于该软件中
当程序员在其他客户应用程序中使用这类程序集时,只需要添加引用即可进行调用。

5.什么是.net的共享程序集

共享程序集(shared assembly),它提供多个应用程序域访问同一个程序集的能力,
内存中只存在该程序集的同一份副本,这种特定域的代码共享极大节省了内存资源占用。
大多情况下,共享程序集安装在全局程序集的高速缓冲存储器中而不存在与应用程序相关目录下,
对它的引用不会产生文件复制,自然就不会有额外的副本。

原文地址:https://www.cnblogs.com/Vinkong/p/12467133.html