代码之家  ›  专栏  ›  技术社区  ›  n8wrl

读取文件属性有多贵?.NET

  •  5
  • n8wrl  · 技术社区  · 16 年前

    我们正在尝试将时间戳附加到某个URL上,以便缓存内容,但在内容发生更改时刷新它们。我们的代码可以归结为:

    DateTime ts = File.GetLastWriteTime(absPath);
    

    其中abspath是URL的映射路径。所以每次我们提供文件链接时,Web服务器都会检查这个文件的最后一次写入时间。有点让我心甘情愿——应该吗?

    5 回复  |  直到 16 年前
        1
  •  7
  •   Lucas Jones    16 年前

    您应该对它进行性能测试,但我现在怀疑它是否比测试文件的存在(例如,它是否是只读的)更昂贵,而且肯定比实际打开文件要便宜。

    如果(在测试之后)您认为这是一个问题,您还可以将您的调用缓存到 GetLastWriteTime (例如,对于任何给定的文件,不要每5秒调用一次以上)。

    另外,我从未使用过它,但是如果缓存是一个问题,我希望您考虑将它的实现委托给一些专家,比如 Squid 而不是自己滚动。

        2
  •  2
  •   Joe Pitz    16 年前

    我没有试过,但你的问题与我一直在考虑的情况有关。

    您没有指出哪些数据正在更改?数据库、XML数据等。

    ASP.NET缓存支持基于各种依赖项更新缓存。

    在基于文件的依赖项、基于时间的依赖项、 以及基于键的依赖关系。

    “依赖项允许我们根据对文件的更改、对其他缓存键的更改或在固定时间点使缓存中的特定项无效。让我们看看这些依赖项中的每一个。”

    这是一篇文章:

    http://msdn.microsoft.com/en-us/library/ms972379.aspx

    谢谢

        3
  •  1
  •   John Fisher    16 年前

    从本质上讲,你的问题“多贵”有三个答案。.

    1. 太贵了-你已经测试过了,为了使系统可用,必须做一些改变。
    2. 可以接受-你已经测试过了,但是它不是很好,但是它足够快可以使用
    3. 相当便宜——你已经测试过了,对性能没有明显的影响。

    我们不能真正回答你的问题,所以你只需要试试。如果你认为它太贵或者值得你花时间把它从可接受的转变为相当便宜的话,那么就换个问题来问如何加快速度。

        4
  •  0
  •   Michael    16 年前

    当链接生成时,它将产生额外的小磁盘I/O。如果在短时间内创建多个URL,这可能是一个瓶颈。没有人能确定这是否会影响到你的场景——你真的需要衡量一下,看看这是否会成为一个问题。

        5
  •  0
  •   Andy Gaskell    16 年前

    或者,如果你担心它,为什么不缓存一分钟呢?