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

2024-05-27 12:12

本文主要是介绍翻译《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文件具有复杂结构。元素可以包含其他元素。

这篇关于翻译《The Old New Thing》- Why are INI files deprecated in favor of the registry?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1007439

相关文章

Python中__new__()方法适应及注意事项详解

《Python中__new__()方法适应及注意事项详解》:本文主要介绍Python中__new__()方法适应及注意事项的相关资料,new()方法是Python中的一个特殊构造方法,用于在创建对... 目录前言基本用法返回值单例模式自定义对象创建注意事项总结前言new() 方法在 python 中是一个

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的

Golan中 new() 、 make() 和简短声明符的区别和使用

《Golan中new()、make()和简短声明符的区别和使用》Go语言中的new()、make()和简短声明符的区别和使用,new()用于分配内存并返回指针,make()用于初始化切片、映射... 详细介绍golang的new() 、 make() 和简短声明符的区别和使用。文章目录 `new()`

Mysql8.0修改配置文件my.ini的坑及解决

《Mysql8.0修改配置文件my.ini的坑及解决》使用记事本直接编辑my.ini文件保存后,可能会导致MySQL无法启动,因为MySQL会以ANSI编码读取该文件,解决方法是使用Notepad++... 目录Myhttp://www.chinasem.cnsql8.0修改配置文件my.ini的坑出现的问题

MySQL8.0找不到my.ini如何解决

《MySQL8.0找不到my.ini如何解决》在配置MySQL主从复制时,发现找不到my.ini配置文件,通过检查路径和打开隐藏文件夹,最终在C:ProgramDataMySQLMySQLSer... 目录问题描述解决方法总结问题描述今天在配置mysql主从复制的时候发现,找不到my.ini这个配置文件。

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文翻译:ICLR-2024 PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS https://openreview.net/forum?id=KS8mIvetg2 验证测试集污染在黑盒语言模型中 文章目录 验证测试集污染在黑盒语言模型中摘要1 引言 摘要 大型语言模型是在大量互联网数据上训练的,这引发了人们的担忧和猜测,即它们可能已

java线程深度解析(一)——java new 接口?匿名内部类给你答案

http://blog.csdn.net/daybreak1209/article/details/51305477 一、内部类 1、内部类初识 一般,一个类里主要包含类的方法和属性,但在Java中还提出在类中继续定义类(内部类)的概念。 内部类的定义:类的内部定义类 先来看一个实例 [html]  view plain copy pu

string字符会调用new分配堆内存吗

gcc的string默认大小是32个字节,字符串小于等于15直接保存在栈上,超过之后才会使用new分配。