zoukankan      html  css  js  c++  java
  • 元数据

    此篇笔记为现在的体会,我感觉比较浅薄,而且当中也应该会有一些错误。这些问题留待以对元数据有更深的理解后现进行修正。

    1.  何为元数据

    元数据是被嵌入到程序文件当中的一些描述信息,.Net PE文件中所定义到和所引用到的类型都会在元数据中有相应的描述。

    2.  元数据有什么用途

    以下这段话是Jeffery先生书里面的对元数据用途的精彩描述。

    l         元数据省去了源代码编译时对头文件的依赖,这是因为在含有实现类型和成员的IL代码文件当中,已经包含了所有被引用的类型和成员的信息。编译器可以直接从托管模块中读取元数据来获得这些信息。

    l         vs.net可以利用元数据来辅助我们编写代码。它的智能感知特性就是通过分析元数据来告诉我们某个类型提供了哪些方法,以及以这些方法有哪些参数。

    l         CLR的代码验证过程可以利用元数据来确保代码仅执行“安全”的操作。

    l         利用元数据,我们可以将一个对象的字段序列化到一个内存块中,然后远程传送给另一台机器,最后再在远程计算机上执行反序列化,从而重新创建对象和他的状态。

    l         利用元数据,垃圾收集器要吧追踪对象的生存周期。对于任何对象,垃圾收集器都能够通过元数据来确定该对象的类型,并且可以获知该对象的哪些字段引用了其它的对象。

    l          

    3.  元数据种类

    .Net中的元数据是由不同的数据表构成的。元数据表在.Net当中被分成为三类(每类有多个表),它们分别是,定义元数据表,引用元数据表还有清单元数据表。

    定义元数据表是用来描述.Net Pe文件本身所定义的数据类型的。在我们程序当中的定义的类,结构等等一切的类型信息,最终都会出现在定义元数据表中。

    引用数据表用来描述.Net Pe当中所引用到的外部类型。在我们程序当中引用的FCL类型、自定义类型(注1)以及第三方类型的定义都会出现在引用数据表内。

    清单元数据表相对于定义元素元和引用元数据表来说,是一类比较特殊的元数据表,它的作用是用来描述程序集信息。程序集的理念很像是动态链接库,在程序集内部包含着很多的类型定义,在程序集的外部,一个程序员可以通过包含这个程序集的方式来使用这个程序所提供的资源。然而与动态链接库所不同的是,程序集中含有元数据(特别是清单数据),这也就使程序集成为了.Net平台实现解决版本冲突和简单部署中的重要基础。正是由于程序集的清单当中描述了程序集的版本,.Net平台才允许多个版本的程序集同时安装到同一台计算机上,并在执行程序时,根据程序所绑定的程序集版本来正确的装入程序集。

    除了描述程序集的版本信息以后,程序集的清单元数据还会对程序集的其它一些定义信息进行描述。这些信息包括程序集中对模块或者其它文件的引用(一个程序集可以由多个模块或者其它的文件主成,但是在这个程序集中只有主文件才会包含清单)、程序集中包含的资源定义,还有程序集中导出类型的定义(我想这可能是为了方便CLR对程序集中导出类型的查找吧,毕竟一个程序集可以包含多个模块,如果没有一个汇总索引的话,在程序集当中查找到某一个特定类型的效率会受到较大的影响)。

    To be continue

  • 相关阅读:
    #3.14 Piday#我的圆周率日
    FUI- 我离钢铁侠还差几步?
    POJ 3617 Best Cow Line (贪心)
    POJ 2386 Lake Counting (水题,DFS)
    POJ 1852 Ants (等价思考)
    CCF 201403-3 命令行选项 (STL模拟)
    CCF 201403-2 窗口 (STL模拟)
    CCF 201403-1 相反数 (水题)
    CCF 201312-4 有趣的数 (数位DP, 状压DP, 组合数学+暴力枚举, 推公式, 矩阵快速幂)
    CCF 201312-3 最大的矩形 (暴力,离散化)
  • 原文地址:https://www.cnblogs.com/light/p/27922.html
Copyright © 2011-2022 走看看