【问题标题】:Is FileInfo.Exists/Copy faster than File? [duplicate]FileInfo.Exists/Copy 比 File 快吗? [复制]
【发布时间】:2013-05-29 14:12:21
【问题描述】:

正如标题所说,下面哪个场景更快?

        // Using FileInfo
        FileInfo file = new FileInfo(@"C:\Test.txt");

        if (file.Exists)
            file.CopyTo(@"C:\TestCopy.txt");

        // Using File
        if (File.Exists(@"C:\Test.txt"))
            File.Copy(@"C:\Test.txt", @"C:\TestCopy.txt");

我知道 FileInfo 更容易阅读,但一种方法比另一种更快吗?

【问题讨论】:

  • 您是否尝试为您的案例编写基准测试?
  • 写小测试并分享结果
  • 见:stackoverflow.com/questions/1324788/…。 YMMV,并且将取决于您的确切用例,因此按照其他人的建议进行基准测试可能是找出答案的最佳方法。
  • 如果我我会说第一个稍微快一点。 exact 相同的 API 操作很可能在内部执行,但在第二种情况下,其中一个执行了两次。
  • 您将无法区分它们。使用你最喜欢的。

标签: c# file io copy exists


【解决方案1】:

不同之处在于FileInfo缓存信息:文件存在检查只执行一次。 然后,如果您检查 Exists 属性然后创建文件,对 Exists 属性的新调用总是会返回 false。

【讨论】:

  • 这是真的,但请注意文件存在性检查是延迟执行的。
  • @MatthewWatson 怎么样?进一步的解释将不胜感激!
  • @SepehrM 我的意思是FileInfo.Exists 的内部布尔字段没有被FileInfo 构造函数初始化。相反,它在您第一次调用FileInfo.Exists 时被初始化。 (您可以通过使用 Reflector 或类似工具检查实现来看到这一点。)
  • @MatthewWatson 谢谢,我不熟悉“延迟评估/执行”这个词!
猜你喜欢
  • 1970-01-01
  • 2020-08-06
  • 2012-07-22
  • 2010-10-20
  • 2016-12-12
  • 1970-01-01
  • 2013-07-26
  • 2019-04-30
  • 2013-05-17
相关资源
最近更新 更多