翻译《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

相关文章

论文翻译: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分配。

excel翻译软件有哪些?如何高效提翻译?

你是否曾在面对满屏的英文Excel表格时感到头疼?项目报告、数据分析、财务报表... 当这些重要的信息被语言壁垒阻挡时,效率和理解度都会大打折扣。别担心,只需3分钟,我将带你轻松解锁excel翻译成中文的秘籍。 无论是职场新人还是老手,这一技巧都将是你的得力助手,让你在信息的海洋中畅游无阻。 方法一:使用同声传译王软件 同声传译王是一款专业的翻译软件,它支持多种语言翻译,可以excel

12C 新特性,MOVE DATAFILE 在线移动 包括system, 附带改名 NID ,cdb_data_files视图坏了

ALTER DATABASE MOVE DATAFILE  可以改名 可以move file,全部一个命令。 resue 可以重用,keep好像不生效!!! system照移动不误-------- SQL> select file_name, status, online_status from dba_data_files where tablespace_name='SYSTEM'

MonoHuman: Animatable Human Neural Field from Monocular Video 翻译

MonoHuman:来自单目视频的可动画人类神经场 摘要。利用自由视图控制来动画化虚拟化身对于诸如虚拟现实和数字娱乐之类的各种应用来说是至关重要的。已有的研究试图利用神经辐射场(NeRF)的表征能力从单目视频中重建人体。最近的工作提出将变形网络移植到NeRF中,以进一步模拟人类神经场的动力学,从而动画化逼真的人类运动。然而,这种流水线要么依赖于姿态相关的表示,要么由于帧无关的优化而缺乏运动一致性

linux dlopen手册翻译

名称 dlclose, dlopen, dlmopen 打开和关闭一个共享对象 简介 #include <dlfcn.h>void *dlopen(const char*filename, int flags);int dlclose(void *handle);#define _GNU_SOURCE#include <dlfcn.h>void *dlmoopen(Lmid_t lm

从计组中从重温C中浮点数表示及C程序翻译过程

目录 移码​编辑  传统浮点表示格式 浮点数的存储(ieee 754)->修炼内功 例子:   ​编辑 浮点数取的过程   C程序翻译过程 移码  传统浮点表示格式 浮点数的存储(ieee 754)->修炼内功 根据国际标准IEEE(电⽓和电⼦⼯程协会)  32位 例子:    64位    IEEE754对有效数字M和

List list = new ArrayList();和ArrayList list=new ArrayList();的区别?

List是一个接口,而ArrayList 是一个类。 ArrayList 继承并实现了List。 List list = new ArrayList();这句创建了一个ArrayList的对象后把上溯到了List。此时它是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。而ArrayList list=new ArrayList();创建一对象则保留了A