【发布时间】:2016-01-11 08:27:16
【问题描述】:
我们有一个应用程序将文件存储在一个临时位置,直到用户决定完成他们的交易。每个事务的临时目录都是唯一的。一旦完成,文件就会从临时位置移动到最终位置,这对于每个事务也是唯一的。这一切都没有任何问题。
我很惊讶,但是在搜索 Google 和 SO 时,我们找不到任何通常被认为是最佳做法的主题:
- 调用 System.IO.Directory.Move(src, des) 以简单地一次移动整个目录,或者
- 调用 System.IO.File.Move(src, des) 一次移动一个文件。
由于这些决定通常取决于许多因素,我应该注意以下条件:
- 源目录和目标目录将始终位于同一台计算机上,但发出调用的应用程序将位于同一网络上的另一台计算机上。我相信应用服务器和文件服务器是同一台物理机上的不同虚拟机,但我并不肯定。
- 文件数的范围可以从 1 到 10 或更多。我自己不监控生产系统,因此我不确定平均文件数,也不知道该数的分布范围。
【问题讨论】:
-
源和目标是否在同一个卷/分区上?
-
是的。通用目录结构为
\temp\ , \final\ 。 -
我会说只是设置一个小的测试环境并使用
Directory.Move()记录速度与File.Move()进行比较。做很多次,然后选择哪个更快。 -
@sab669 如果他想移动整个目录,我会使用
Directory.Move。只有当存在 性能问题时,我才会开始测试哪个更好。有很大差异的可能性很小。首先使用最明显的方式。 -
这是一个公平的观点,假设从纯粹的可读性角度来看,仅使用 Directory 更有意义
标签: .net system.io.file system.io.directory