CLR的执行模型(续)

  CLR的执行模型(续)

IL与知识产权保护  
    在Web应用和Web服务中,程序集是在服务器端,不可能获得,所以是安全的。
    可以用非托管模块来实现需要保密的算法。

Windows中,每个进程都有它自己的虚拟地址空间,使得一个进程无法干扰另一个进程,从而获得可靠性和稳定性。通过验证托管代码,可以确定代码不会非法访问内存,而且不会对另一个应用程序的代码产生干扰。

在单个OS进程中运行多个应用程序,可以减少进程数,减少需要的资源,从而增强性能。每个托管应用程序都称为一个AppDomain

不安全代码unsafe   
    在项目“属性”中的“生成”选项,“常规”中选中“允许不安全代码”,即可使用不安全代码了。不安全代码都要放到unsafe代码块中。
    在默认情况下,在用户计算机上显示安装的程序集被授予安全信任;通过内部网络或Internet执行的程序集不被授予执行不安全代码的权限。

本地代码生成器(NGen.exe)      
    作用:
  加快应用程序的启动速度;
  减小应用程序的工作集。

    存在问题:
  当使用反射和序列化时,需要包括
IL和元数据的程序集,所以不能只发布NGen.exe生成的文件;
  NGen.exe生成的文件可能失去同步,最好在更新模式中运行NGen.exe,以保持同步;
  较差的加载时性能(重定位基址);
  较差的执行时性能(静态字段只能间接访问,NGen到处插入代码来调用类构造器)。
 

通用类型系统(Common Type System  CTS
CLR是完全围绕类型展开的。

公共语言基础结构(Common Language Infrastructure  CLI一种标准

CTS规定:一个类型可以包含零个或者多个成员;制定了类型可视化规则以及类型成员的访问规则;所有类型最终必须从预定义的System.Object类型继承。

公共语言规范(Common Language Specification  CLS)所有编程语言都支持的一个最小特性集
编程语言的集成是非常好的,但不同的语言存在比较大的区别,如:有些编程语言不支持unsigned、操作符重载、参数数量可变的方法,不区分大小写。



CLS
的规则:在CLR中,一个类型的每个成员要么是一个字段,要么是一个方法。其它所有成员最终都要转化为字段或方法。
[assembly:CLSCompliant(true)]该属性应用于程序集,要求编译器核实在任何公开揭示的类型中,不存在任何特定的结构会防碍类型从其他编程语言中访问。

注:只有public class public 成员才会受编译器检查

 

与非托管代码的互操作性
CLR支持三种互操作情形:

1.       托管代码能调用DLL中的一个非托管函数

2.       托管代码可以使用一个现有的COM组件

3.       非托管代码可以使用一个托管类型

posted on 2007-11-20 12:02  Sandwi  阅读(366)  评论(0编辑  收藏  举报

导航