代码之家  ›  专栏  ›  技术社区  ›  Carl Seleborg

xp上的文件:关闭“上次访问时间”安全吗?

  •  6
  • Carl Seleborg  · 技术社区  · 16 年前

    我拼命寻找便宜的方法来降低我的家庭电脑上的建设时间。 article about disabling the Last Access Time attribute 在WindowsXP上的一个文件,这样简单的读取就不会把任何东西写回磁盘。

    也很简单。在DOS提示符下写入:

    fsutil behavior set disablelastaccess 1

    有没有人尝试过 构建c++项目 是吗?有什么缺点吗?

    [编辑]有关此主题的详细信息 here 是的。

    9 回复  |  直到 16 年前
        1
  •  7
  •   Mike Dimmick    16 年前

    SetFileTime's documentation 以下内容:

    “NTFS将文件的更新延迟到最后一次访问后的一小时。”

    关闭这个功能是没有意义的——原来的文章是错误的,数据不是每次访问都写出来的。

    编辑:

    至于为什么那篇文章的作者声称加速了10倍,我认为他把他的加速归因于错误的事情:他还禁用了8.3个文件名的生成。要生成一个文件的8.3个文件名,NTFS必须基本上生成每个可能性,然后看看它是否已经在使用中(没有引用;我敢肯定)。 Raymond 已经讨论过但找不到链接)。如果您的文件都共享相同的前六个字符,您将被这个问题所困扰,而且更具腐蚀性的是,您应该在前六个字符中放置区分文件的字符,这样它们就不会冲突。关闭短名称生成将阻止此操作。

        2
  •  4
  •   paxdiablo    16 年前

    我还没有在windows上尝试过(我今晚就来,谢谢),但是在linux上类似的事情(安装驱动器时没有时间选项)加快了速度 相当地 是的。

    我想不出,除了审计目的之外,最后一次访问时间会有用吗?即使是那样,Windows也会存储访问它的用户吗?我知道Linux没有。

        3
  •  4
  •   Dominik Grabiec    16 年前

    我建议你试试看有没有什么不同。

    然而,我对这一点实际上持悲观态度,因为在更大的/干净的构建中,你将写出大量的数据,所以调整文件访问时间不会花太多时间(加上它可能被缓存)。

    不过,我希望被证明是错的。


    结果:

    在调试和释放配置中,在代码库上运行了一些构建,最后启用了访问时间,并被禁用。

    我们的源代码大约是39 MB(磁盘上的48兆字节),我们为这些测试构建了大约一半的配置。生成的调试生成 1.76 GB 临时文件和输出文件,而发布生成了大约600 MB的此类数据。我们使用ant和visual studio命令行生成工具的组合在命令行上构建。

    我的机器是一个核心的2双频3GHz,4GB内存,7200RPM硬盘,运行WindowsXP32位。

    使用上次访问时间禁用的建筑物:

    调试时间=6:17,5:41

    发布时间=6:07,6:06

    启用上次访问时间的生成:

    调试时间=6:00,5:47

    释放时间=6:19,5:48

    总的来说,我没有注意到这两种模式之间的差异,因为在这两种情况下,文件最有可能已经在系统缓存中,所以它应该只是从内存中读取。

    我相信只要实现适当的预编译头(而不是visual studio在项目中创建的自动生成的头),你就能获得最大的收益。几年前我们在工作中实现了它(当时代码库要小得多),它将我们的构建时间减少到原来的三分之一。

        4
  •  1
  •   bastos.sergio    16 年前

    这是一个很好的选择,但它会影响一些工具。像远程存储服务和依赖于文件访问统计信息的其他实用工具来优化文件系统(即诺顿DeRRAG)

        5
  •  0
  •   sven    16 年前

    这会使性能有一点提高。除此之外,它不会做更多的事情(当然,您将无法看到最后一次访问文件的时间)。当我使用 nLite 去剪掉我不需要的臃肿。

        6
  •  0
  •   Mark    16 年前

    我不想把注意力从“最后访问时间”的问题上转移开,但可能还有其他方法可以加快构建速度。不知道上下文和项目设置,很难说什么可能很慢,但可能有一些事情可以帮助您:

    创建“uber”版本。也就是说,创建一个编译uber.cpp文件,该文件包含许多行,如

    #include "file1.cpp"
    #include "file2.cpp"
    

    您可能会遇到冲突的静态变量名称,但这些通常很容易排序。初始设置是一种痛苦,但建造时间可以大幅增加。对我们来说,最大的缺点是在developer studio中,如果某个文件是uber构建的一部分,则不能右键单击该文件并说“compile”。不过没什么大不了的。我们已经为Uber构建了单独的构建配置,编译Uber文件,但不包括构建过程中的单个CPP文件。如果你需要更多的信息,留下评论,我可以给你。而且,优化器倾向于在Uber构建中做稍微好一些的工作。

    另外,您是否有大量包含文件,或者包含文件之间有很多依赖关系?如果是这样的话,这将大大降低构建时间。

    你在使用预编译头吗?如果没有,你可以把它作为一个解决方案,因为这也会有帮助。

    慢建时间是 通常 跟踪到很多文件I/O,这是迄今为止构建中最大的时间流——只需打开、读取和解析所有文件。如果你删除文件I/O,你将改进构建时间。

    无论如何,很抱歉稍微偏离了主题,但改变文件最后访问时间设置方式的建议似乎是一个“大锤”解决方案。

        7
  •  0
  •   user11318    16 年前

    对于繁忙的服务器,禁用上次访问时间通常是一个好主意。唯一的潜在缺点是,如果有使用最后访问时间的脚本,例如,告诉文件不再被写入。

    也就是说,如果你想在C++项目上提高构建时间,我强烈推荐阅读。 Recursive Make Considered Harmful 是的。这篇文章大约有十年历史了,但它对于我们的构建脚本中的递归定义如何导致长的构建时间的观点仍然是非常值得理解的。

        8
  •  0
  •   ken markham    16 年前

    禁用访问时间是有用的,当使用SSD的(固态驱动器-卡,USB驱动器等),因为它减少了写入驱动器的数量。所有固态存储设备的使用寿命都是通过对每个单独地址的写入次数来衡量的。有些媒体规定最少100万,甚至100万。操作系统和其他可执行文件可以在单个操作中访问多个文件以及用户文档访问。这将适用于eee pc、嵌入式系统和其他系统。

        9
  •  -1
  •   mrd0    15 年前

    致迈克·迪米克:

    尝试将USB驱动器与许多文件连接,并将它们复制到您的内部驱动器。这也是程序编译(在原始文章中描述)的情况。