c# - 有没有更好的方法来覆盖文件然后检查更改(在 C# 中)?

标签 c# optimization file file-io

情况:

我有一个 C# 程序,它执行以下操作:

  • 生成许多文件(替换上次程序运行时生成的文件。)
  • 读取这些文件并执行耗时的计算。

问题:

我只想对自上次运行程序以来实际发生更改的文件执行耗时的计算。

解决方案 1:

  • 重命名旧文件。
  • 写入新文件。
  • 阅读并比较这两个文件。

这涉及写入一个文件并读取两个文件,这似乎比所需的磁盘访问次数更多。

解决方案 2:

  • 写入字符串而不是文件。
  • 读取旧文件并与字符串进行比较。
  • 如果不同,则覆盖旧文件。

这将涉及读取一个文件并可能写入一个文件,这似乎比我的第一个想法有了很大的改进。

问题:

你能描述一个更好的方法来解决我的问题吗? (并解释为什么它更好?)

最佳答案

一种解决方案可能是根据文件内容生成某种校验和。然后,当您生成新内容时,您只需比较校验和值即可查看文件是否已更改。

将校验和存储为文件中的第一条记录(或至少靠近文件开头),以最大限度地减少必须读取的数据量。

如果您可以以某种方式将校验和存储为文件的属性(而不是文件本身),您甚至不需要打开旧文件。另一种选择是将校验和及其引用的文件存储在另一个中央文件或数据库中,但存在可能失步的危险。

关于c# - 有没有更好的方法来覆盖文件然后检查更改(在 C# 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1793175/

相关文章:

c# - 为什么 .NET 与 Windows 操作系统是分开的?

c# - 如何将相机附加到 HLAPI 网络管理器实例化的播放器对象?

javascript - 在 Javascript 中执行(整数)操作的最有效方法是什么?

.net - 文件 : how to distinguish file lock and permission denied cases?

java - 编辑文件而不遍历整个字节缓冲区?

c# - 从 MVVM 的 subview 模型中引用方法和存储库

c# - ViewModel 是否应该具有绑定(bind)到模型上的 DependencyProperties 的直通 DependencyProperties?

c++ - 确定代码块需要多少个时钟周期

c++ - 在固定大小的数组上展开 C++ 中的循环是否有用?

java - 在 Java 中读取 CSV 文件时跳过第一行