翻译《The Old New Thing》- Why are INI files deprecated in favor of the registry?

Why are INI files deprecated in favor of the registry? - The Old New Thing (microsoft.com)icon-default.png?t=N7T8https://devblogs.microsoft.com/oldnewthing/20071126-00/?p=24383

Raymond Chen 2007年11月26日


为什么弃用 INI 文件而改用注册表?

        欢迎,Slashdot的读者们。请记住,本网站仅供娱乐。为什么INI文件被弃用,而注册表取而代之?INI文件存在许多问题:

       注册表试图解决这些问题。你可能会争论这些顾虑是否合理,但 Windows NT 团队认为它们是合理的。

        评论者TC指出,钟摆又摆回了文本配置文件,但这次是XML。这样一来,INI 文件所存在的许多问题又重新出现了,但它有一个最大的优点,那就是没有人会向 XML 配置文件写入内容,他们只会从中读取。XML 配置文件不是用来存储用户设置的,它们只包含程序本身的信息。让我们再来看看这些问题。

       XML设法绕过了INI文件所拥有的许多问题,但前提是你承诺只从中读取(并且如果每个人都同意使用符合标准的解析器),以及如果你不需要超出文件级别的安全性细粒度。一旦你写入它们,那么许多INI文件问题就会重新出现。

  • INI文件不支持Unicode。尽管有私有配置文件函数的Unicode版本,但最终它们只是将ANSI文本写入INI文件。(有一种非常规的方法可以创建Unicode INI文件,但你必须超出API才能做到这一点。)在16位Windows中这不是问题,因为16位Windows也不支持Unicode!😓
  • INI文件的安全性不够细粒度。由于它只是一个文件,你设置的任何权限都是文件级别的,而不是键级别。你不能说,“任何人都可以修改这一节,但那一节只能由管理员修改。”在16位Windows中这不是问题,因为16位Windows没有安全性。😓
  • 多个写入者对INI文件可能导致数据丢失。考虑两个线程试图更新INI文件。如果它们同时运行,你可能会得到这样的结果
    线程1线程2
    读取INI文件
    读取INI文件
    写入INI文件 + X
    写入INI文件 + Y

    注意,线程2对INI文件的更新意外地删除了线程1所做的更改。在16位Windows中这不是问题,因为16位Windows是合作式多任务的。只要你在读取和写入之间不放弃CPU,你就是安全的,因为没有人能在你放弃之前运行。😁

  • INI文件可能会遭受拒绝服务。一个程序可以以独占模式打开INI文件并阻止其他人。如果INI文件被用来保存安全信息,这是很糟糕的,因为它阻止任何人查看这些安全设置。在16位Windows中这也是一个问题,但由于16位Windows没有安全性,一个想要对INI文件发起拒绝服务攻击的程序可以简单地删除它!
  • INI文件只包含字符串。如果你想存储二进制数据,你必须以某种方式将其编码为字符串。
  • 解析INI文件相对较慢。每次你在INI文件中读取或写入一个值,文件都必须被加载到内存中并解析。如果你向INI文件写入三个字符串,那么这个INI文件就被加载和解析了三次,并被写入磁盘三次。在16位Windows中,三个连续的INI文件操作只会解析一次,写入一次,因为操作系统是合作式多任务的。当你访问INI文件时,它被解析到内存并缓存。当你最终放弃CPU给另一个进程时,缓存会被刷新。
  • 许多程序打开INI文件并直接读取它们。这意味着INI文件格式被锁定,无法扩展。即使你想向INI文件添加安全性,你也不能。更重要的是,许多解析INI文件的程序都有缺陷,所以实际上你不能在INI文件中存储超过大约70个字符的字符串,否则会导致其他程序崩溃。
  • INI文件的大小限制为32KB。
  • INI文件的默认位置是Windows目录!这对Windows NT来说绝对是不好的,因为只有管理员才有写入权限。
  • INI文件只包含两个级别的结构。INI文件由节组成,每个节由字符串组成。你不能在一个节内放置其他节。
  • [9点添加] 集中管理INI文件很困难。由于它们可以在系统的任何地方,网络管理员不能编写脚本询问,“每个人都在使用最新版本的Firefox吗?”他们也不能部署脚本说“将每个人的Firefox设置设置为XYZ并拒绝写入访问,以便他们不能更改它们。”
  • XML文件支持Unicode。
  • XML文件的安全性不够细粒度。但由于XML配置文件是只读的,主要的反对意见被回避了。(但如果你想让只有管理员有权限读取XML的特定部分,那么你就麻烦了。)
  • 由于XML配置文件是只读的,你不必担心多个写入者。
  • XML配置文件文件可能会遭受拒绝服务。你仍然可以独占地打开它们并阻止其他进程。
  • XML文件只包含字符串。如果你想存储二进制数据,你必须以某种方式进行编码。
  • 解析XML文件相对较慢。但由于它们是只读的,你可以安全地缓存解析结果,所以你只需要解析一次。
  • 程序手动解析XML文件,但XML格式已经被锁定,所以你无论如何都不能扩展它,即使你想。希望这些程序使用符合标准的XML解析器而不是自己编写,但如果人们编写了自己的自定义XML解析器,可能会在处理指令或长于70个字符的字符串时出现问题,我也不会感到惊讶。
  • XML文件没有大小限制。
  • XML文件没有默认位置。
  • XML文件具有复杂结构。元素可以包含其他元素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/648995.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【再探】设计模式—职责链模式、命令模式及迭代器模式

行为型设计模式研究系统在运行时对象之间的交互,进一步明确对象的职责。有职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式及访问模式共11种。 1 职责链模式 需求:1) 请求能被多…

2024可信赖的企业级生成式 AI 白皮书

来源:COPU&IBM: 近期历史回顾:

[随笔] 在CSDN的6周年纪念日随笔

纪念 转眼已过6年,大一的时候学习编程,潜水 CSDN 学习各类博文,才学浅薄就没有主动写博文记录自己的学习历程。 过了段时间刚刚到了大二,很喜欢 Todolist,意气风发的写下《一份清爽的编程计划》,哈哈。 …

新浪测试社招要个25K,第一次面大厂挂了

一面 1、讲下被测系统和你负责测试的模块功能? 2、为什么选择这个测试框架,这个测试框架有什么优缺点? 3、测试文件的目录,包含哪些包,这些之间是怎么调用的? 4、UI自动化和接口自动化都是怎么做的&…

FFmpeg之转码

文章目录 概述transcode小结 概述 上一篇说了主要的流程,也就是ffmpeg_parse_options的流程,如下图: 红色箭头的流程说的差不多了,接下来看看绿色框框,也就是transcode的流程。 transcode 还是先给出我画的流程图&…

SPSS之因子分析

SPSS中因子分析功能在【分析】--【降维】--【因子分析】中完成(在SPSS软件中,主成分分析与因子分析均在【因子分析】模块中完成)。 因子分析的求解通常从分析原始变量的协方差矩阵或相关矩阵着手。 (1)当变量取值的度…

纯CSS丝滑边框线条动画

在这个网站(minimal-portfolio-swart.vercel.app)发现一个不错的交互效果,用户体验效果很不错。如封面图所示,这个卡片上有一根白色的线条围绕着卡片移动,且在线条的卡片内部跟随这一块模糊阴影,特别是在线…

无线麦克风哪个品牌音质最好,揭示麦克风什么牌子的音质效果好!

​随着科技的不断发展,无线领夹麦克风已经成为现代演讲、演出和采访中不可或缺的工具。这种小巧便携的设备,能够让我们摆脱线缆的束缚,自由地在舞台上或讲台上移动,同时保持声音的清晰和稳定。在这篇文章中,我们将介绍…

国产操作系统上telnet命令详解 _ 统信 _ 麒麟 _ 中科方德

原文链接:国产操作系统上telnet命令详解 | 统信 | 麒麟 | 中科方德 Hello,大家好啊!今天给大家带来一篇在国产操作系统上使用telnet命令的详细介绍文章。telnet是一个经典的网络协议和工具,广泛用于测试和管理远程服务器。本文将详…

低代码与人工智能:改变软件开发的未来

引言 在当今快速发展的科技时代,软件开发行业也在不断地创新和演进。其中,低代码开发和人工智能技术是两个备受关注的领域,低代码开发通过简化开发流程和降低编码难度,使得软件开发变得更加高效和便捷,而人工智能技术…

收放卷主从轴速度随动增益计算(CODESYS ST代码)

收放卷主从轴速度随动控制,我们需要知道随动增益,如果是利用电子齿轮实现速度随动,我们需要通过增益计算电子齿轮比的分子和分母,具体源代码大家可以参考下面文章链接: 收放卷伺服控制系统详细算法介绍(电子齿轮+张力PID卷绕轴控制功能块)_收放卷伺服控制属于-CSDN博客文…

一文教你如何调用Ascend C算子

Ascend C是CANN针对算子开发场景推出的编程语言,原生支持C和C标准规范,兼具开发效率和运行性能。基于Ascend C编写的算子程序,通过编译器编译和运行时调度,运行在昇腾AI处理器上。使用Ascend C,开发者可以基于昇腾AI硬…

Postman快捷功能-快速填写请求头

大家好,之前给大家分享关于 Postman 工具的基础使用,今天给大家介绍一个快捷功能,可以一定程度提高我们使用 Postman 工具的效率,在我们进行接口测试时,几乎每个接口都需要填写 Headers,且 Headers 中的参数…

MySQL--联合索引应用细节应用规范

目录 一、索引覆盖 1.完全覆盖 2.部分覆盖 3.不覆盖索引-where条件不包含联合索引的最左则不覆盖 二、MySQL8.0在索引中的新特性 1.不可见索引 2.倒序索引 三、索引自优化--索引的索引 四、Change Buffer 五、优化器算法 1.查询优化器算法 2.设置算法 3.索引下推 …

如何使用OutputStream类实现文件的读写操作?

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

如何提升项目经理的汇报能力?从这四点做起

项目经理不仅需要管理项目进度、预算和资源,更需要与各方进行有效的沟通,确保项目的顺利进行。而在所有沟通形式中,当众演讲无疑是难度最大的一种。 他们需要向团队成员传达项目的最新进展和要求,向领导和客户汇报工作成果&…

Java 定义类型处理MySQL point类型数据

1.三个类来处理 引入maven依赖 <!-- 引入 jts 库解析 POINT --><dependency><groupId>com.vividsolutions</groupId><artifactId>jts</artifactId><version>1.13</version></dependency>import javax.validation.constr…

推送邮件接口设置的方法?邮件接口的作用?

推送邮件接口如何与现有系统集成&#xff1f;怎么调试邮件接口&#xff1f; 通过推送邮件接口&#xff0c;应用程序可以自动向用户发送邮件通知&#xff0c;提醒他们重要事件或更新。AokSend将介绍如何设置推送邮件接口&#xff0c;以便您的应用程序能够充分利用这一功能。 推…

和为k的子数组 ---- 前缀和

题目链接 题目: 分析: 思考: 此题能否用滑动窗口来解决? 滑动窗口的适用前提是具有单调性, left和right指针是不回退的, 此题中数组有负数和零, 很难保证指针不回退, 所以不能用滑动窗口利用前缀和的思想, 计算以i结尾的所有子数组, 前缀和为sum[i] 想要找到和为k的数组, 我…

基于图鸟UI的圈子商圈:一个全栈前端模板的探索与应用

摘要&#xff1a; 本文介绍了一个基于图鸟UI的纯前端模板——圈子商圈&#xff0c;它支持微信小程序、APP和H5等多平台开发。该模板不仅包含丰富的UI组件和页面模板&#xff0c;还提供了详尽的使用文档&#xff0c;旨在帮助开发者快速构建出酷炫且功能齐全的前端应用。本文将从…