2009-08-25 18 views
5

我們正在嘗試將時間戳附加到某些URL以緩存內容,但當它們發生更改時會更新它們。我們的代碼歸結爲:閱讀文件屬性有多昂貴? .NET

DateTime ts = File.GetLastWriteTime(absPath); 

其中absPath是URL的MappedPath。因此,每次我們提供文件鏈接時,Web服務器都會檢查此文件的最後寫入時間。有點給了我意志 - 應該嗎?

回答

7

你應該對它進行性能測試,但是我懷疑它比測試一個文件的存在性更昂貴(例如,它是否是隻讀的),並且肯定比實際打開文件要便宜。

如果(測試後)它確定它是一個問題,您還可以將您的呼叫緩存到GetLastWriteTime(例如,對於任何給定文件,不要每5秒調用一次)。

另外,我從來沒有使用它,但如果緩存是一個問題,我希望你已經考慮委託其實施給像Squid這樣的專家,而不是滾動自己的。

0

當鏈接生成時,會產生額外的小磁盤I/O。如果你在很短的時間內創建了很多URL,這可能是一個瓶頸。沒有人可以肯定地說這是否會影響你的情況 - 你真的需要測量並確定這是否會成爲問題。

0

或者如果你擔心它,爲什麼不緩存一分鐘?

1

從本質上講,您的問題「有多貴?」有三個答案。

  1. 太貴了 - 你已經測試過了,爲了使系統可用,必須改變一些東西。
  2. 可接受 - 您已經測試過,但效果並不好,但速度足夠快使用
  3. 相當便宜 - 您已經測試過,且對性能沒有明顯影響。

我們無法真正回答你的問題,所以你只需要嘗試一下。如果你認爲它太昂貴了,或者值得你花時間將它從可接受的價格轉變爲便宜的價格,那就改變問題,詢問如何加快速度。

2

我還沒有試過這個,但是你的問題與我一直在想的情況有關。

您沒有指出哪些數據正在改變?數據庫,xml數據等。

ASP.NET緩存確實支持基於各種依賴關係更新緩存。

在基於文件的依賴關係,基於時間的依賴關係, 和基於關鍵字的依賴關係中查看本文。

「依賴關係允許我們根據對文件的更改,對其他緩存鍵的更改或在固定時間點使緩存中的特定項失效。讓我們來看看這些依賴關係中的每一個。「

下面是文章:

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

感謝