热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

(翻译)《Expert.NET2.0ILAssembler》第五章元数据表的组织5.1什么是元数据?

返回目录本章对元数据及其构造方式进行了概述。也还描述了元数据验证。后面的章节将会分析单独的元数据项——基于这里所表示的基础。我理解你可能的急躁——“这个家伙不要拖延时间,什么时候才能进入正题

返回目录

 

本章对元数据及其构造方式进行了概述。也还描述了元数据验证。后面的章节将会分析单独的元数据项——基于这里所表示的基础。我理解你可能的急躁——“这个家伙不要拖延时间,什么时候才能进入正题?”——但是我仍然奉劝你不要跳过本章。远远不是拖时,我只是系统地接近这个对象。这看上去可能是一样的,但是动机是完全不同的,而这正是我所关心的。

 

什么是元数据?

元数据的定义:描述数据的数据。然而,就像每个通常的定义一样,这个定义并没有丰富的信息。在CLR的上下文中,元数据表示由描述符组成的一套体系,这些操作符包括了在一个模块中被声明或引用的所有项。由于CLR模型天生就是面向对象的,因此在元数据中描述的项是类和它们的成员,以及它们伴随着的特性、属性和关联。

译注:这里的关联,举例而言,如继承。

从实用的观点看,元数据所扮演的角色类似于COM世界中的类库所扮演的角色。可是,在这个普通的级别上,这些类似之处只有这些,接下来则是不同点。元数据,从细枝末节上描述了模块或程序集的结构化方面,比由类库提供的数据要极大的丰富,这些类库只携带了将COM接口视为由模块所暴露的信息。重要的区别是,元数据是一个托管模块的完整部分,这意味着每个托管模块总是携带着一个关于它的逻辑结构的完全的、高级别的、正式的描述。

从结构上说,元数据是一个正规的关系型数据库。这意味着元数据被组织为一组交叉引用的二维表——而不是,例如,一个带有一棵树状结构的层联级数据库。元数据表的每一列包括了数据或者指向另一个表中的一行的引用。元数据并不包括任何重复的数据字段,数据的每个类别都只位于元数据的数据库的一个表中。如果另一个表也需要使用这个相同的数据,它将引用保存着这个数据的表。

例如,正如第一章所述,一个类定义携带了特定的二进制特性(标记)。这个类的方法的行为和特性受这个类的标记影响,因此,在一条描述了其中一个方法的元数据记录中,复制这个类的一些特性,包括标记,是非常诱人的。但是数据定义不仅导致数据库大小的增长,也会导致保持这些复制体相容的问题。

替代的,方法描述符按照这样的方式存储:父类总是能从一个给定的方法描述符中被发现。这种参考方案确实需要一定数量的搜索,而这是非常昂贵的,如果不是这种典型的基于.NET的应用程序,处理器的速度也不会是一个问题——包括通信带宽和数据完整性。

       如果这样的布局对你而言看起来并不是那么有效,想一想如果你是运行时的类加载器,你通常将如何访问元数据。作为一个类加载器,你会想加载一个完整的类,包括它的所有方法、字段和其它成员。而且,正如我之前谈到的,这个类的描述符(记录)携带了指向这个方法表的记录的一个引用,这个方法表表示了这个类的第一个方法。属于这个类的方法记录的末端是定义在下一个类的方法记录的开始部分,或者(对于最后一个类)是定义在这个方法表的末端。对于字段数据也是这样的。

显然,这种技术需要方法表中的记录存储在它们的父类中。这同样应用于其它表映射到表的关系(类映射到字段,方法映射到参数等等)。如果这种需求被满足,元数据就被认为“优化的”(optimized)或“压缩的”(compressed)。图5-1显示了这样的元数据的一个示例。ILAsm编译器总是生成优化的元数据。

 

5-1 优化的元数据的一个示例

 

然而,臃肿的元数据发布或可增长的编译,导致了这样的结果:将这些子表插入到它们所拥有的类中是可能的。例如,类记录A可能被首先发布,紧跟其后的是类记录B,类B的方法记录,然后是类A的方法记录;或者这个顺序可能是类记录A,然后是类A的一些方法记录,紧跟其后的是类记录B,类B的方法记录,然后是类A的剩余的方法记录。

在这种情形中,额外的中间元数据表会被预定,提供了非插入式的检索表,这些表按照它拥有的类进行排序。取代以引用这些方法记录,类的记录引用了一个中间表(指针表)的记录,而且这些记录依次引用了这些方法记录,正如图5-2中列出的表格。使用了这种中间检索表的元数据被称为未优化的或未压缩的。

两种场景经常导致发布非压缩的元数据结构:“编辑和继续”场景,当一个模块被加载到内存的时候,该模块的元数据和IL代码会在这种场景中被修改,而另一种是增长的编译场景,元数据和IL代码在“安装”时被修改。

 

5-1 一个未优化的元数据的例子

 

 

 


推荐阅读
  • 易语言程序加密的基本原则涉及多种技术和策略。早期的加密方法主要是在软盘上创建非标准磁道,并在这些磁道中存储关键数据,例如解密密钥等。现代加密技术则更加注重算法的安全性和数据的完整性,以确保程序在运行过程中不被轻易破解。 ... [详细]
  • 如何精通编程语言:全面指南与实用技巧
    如何精通编程语言:全面指南与实用技巧 ... [详细]
  • POJ3669题目解析:基于广度优先搜索的详细解答
    POJ3669(http://poj.org/problem?id=3669)是一道典型的广度优先搜索(BFS)问题。由于陨石的降落具有时间属性,导致地图状态会随时间动态变化。因此,可以利用结构体来记录每个陨石的降落时间和位置,从而有效地进行状态更新和路径搜索。 ... [详细]
  • 在 CentOS 7 中,为了扩展可用软件包的数量,通常需要配置多个第三方软件源。这些第三方源包括 EPEL、Nux Dextop 和 ELRepo 等,它们提供了大量官方源中未包含的软件包,从而增强了系统的功能性和灵活性。通过正确配置这些源,用户可以轻松安装和管理更多种类的软件,满足不同的需求。 ... [详细]
  • Windows 11系统中Win键失效的解决方法与专业建议
    Windows 11系统中Win键失效的解决方法与专业建议 ... [详细]
  • iOS 设备唯一标识获取的高效解决方案与实践
    在iOS 7中,苹果公司再次禁止了对MAC地址的访问,使得开发者无法直接获取设备的物理地址。为了在开发过程中实现设备的唯一标识,苹果推荐使用Keychain服务来存储和管理唯一的标识符。此外,还可以结合其他技术手段,如UUID和广告标识符(IDFA),以确保设备的唯一性和安全性。这些方法不仅能够满足应用的需求,还能保护用户的隐私。 ... [详细]
  • 深入解析数据库中的存储过程与触发器技术
    本文深入探讨了数据库中的存储过程与触发器技术。存储过程是一组预编译的SQL语句,经过优化后存储在数据库服务器中,以提高执行效率。在大型数据库系统中,通过调用存储过程的名字,用户可以快速执行复杂的操作,从而提升系统的性能和响应速度。此外,触发器作为一种特殊的存储过程,能够在特定事件发生时自动执行,进一步增强了数据库的自动化管理和数据完整性。 ... [详细]
  • 双因子安全机制与WiFi万能钥匙的较量:解析其背后的对抗策略
    几乎所有智能手机用户都熟悉类似“WiFi万能钥匙”的应用程序。这款应用凭借庞大的下载量,不仅在各大应用商店中占据显著位置,还长期稳居下载排行榜前列。然而,随着双因子认证等高级安全机制的普及,这类应用面临着前所未有的挑战。本文将深入探讨双因子安全机制与WiFi万能钥匙之间的对抗策略,分析其背后的技术原理和安全风险。 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • 并发编程入门:初探多任务处理技术
    并发编程入门:探索多任务处理技术并发编程是指在单个处理器上高效地管理多个任务的执行过程。其核心在于通过合理分配和协调任务,提高系统的整体性能。主要应用场景包括:1) 将复杂任务分解为多个子任务,并分配给不同的线程,实现并行处理;2) 通过同步机制确保线程间协调一致,避免资源竞争和数据不一致问题。此外,理解并发编程还涉及锁机制、线程池和异步编程等关键技术。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • 在拉斯维加斯举行的Interop 2011大会上,Bitcurrent的Alistair Croll发表了一场主题为“如何以云计算的视角进行思考”的演讲。该演讲深入探讨了传统IT思维与云计算思维之间的差异,并提出了在云计算环境下应具备的新思维方式。Croll强调了灵活性、可扩展性和成本效益等关键要素,以及如何通过这些要素来优化企业IT架构和运营。 ... [详细]
  • 七款高效编辑器与笔记工具推荐:KindEditor自动换行功能解析
    本文推荐了七款高效的编辑器与笔记工具,并详细解析了KindEditor的自动换行功能。其中,轻笔记QingBiJi是一款完全免费的记事本软件,用户可以通过其简洁的界面和强大的功能轻松记录和管理日常事务。此外,该软件还支持多平台同步,确保用户在不同设备间无缝切换。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 【漫画解析】数据已删,存储空间为何未减?揭秘背后真相
    在数据迁移过程中,即使删除了原有数据,存储空间却未必会相应减少。本文通过漫画形式解析了这一现象背后的真相。具体来说,使用 `mysqldump` 命令进行数据导出时,该工具作为 MySQL 的逻辑备份工具,通过连接数据库并查询所需数据,将其转换为 SQL 语句。然而,这种操作并不会立即释放存储空间,因为数据库系统可能保留了已删除数据的碎片信息。文章进一步探讨了如何优化存储管理,以确保数据删除后能够有效回收存储空间。 ... [详细]
author-avatar
love乄鮰
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有