在C#中缓存FileInfo属性

Iai*_*oat 11 .net c# caching fileinfo

从属性的MSDN文档FileInfo.Name,我看到属性的数据在第一次被调用时被缓存,并且随后将仅使用该Refresh方法进行更新.

我有以下问题,我在文档中找不到或不太清楚:

  1. 是否同时缓存了所有属性的数据?

  2. Refresh方法是在创建时调用的FileInfo,还是仅在第一次调用属性时调用?

  3. 如果我调用了一个属性,例如Name属性,并且它被调用Refresh,将DirectoryName首次调用另一个属性(例如属性)使其Refresh再次调用,或者它是否仅由在整个类中访问的第一个属性调用(见问题#1)?

  4. 我可以通过Refresh手动调用预先缓存所有属性吗?(假设它没有在构造对象时预先缓存)

  5. Refresh手动调用是否会导致预先缓存的属性,例如CreationTime,还要刷新?

sha*_*tor 4

  1. 猜测是的。FileInfo仅获取之前获取过的属性似乎是一种弄巧成拙的“优化” ,尤其是当它们可以(并且可能)在一个 API 调用中全部获取时。

  2. 事实上,文档调用了DirectoryInfo提供已缓存的方法,这FileInfo非常强烈地表明(无论如何,对我来说)简单地构造 aFileInfo不会缓存任何内容。这是有道理的 - 如果您FileInfo直接构造 a ,它可能引用一个尚不存在的文件(例如,您计划创建它),而返回缓存的所有方法都FileInfo引用当时存在的文件快照,假设您将至少使用其中的一些

  3. 不,根据我对问题 1 的回答。这就是 Refresh 方法存在的原因。

  4. 我想是这样的(见答案1)。

  5. 是的。参见答案3。