我們正在嘗試將時間戳附加到某些URL以緩存內容,但當它們發生更改時會更新它們。我們的代碼歸結爲:閱讀文件屬性有多昂貴? .NET
DateTime ts = File.GetLastWriteTime(absPath);
其中absPath是URL的MappedPath。因此,每次我們提供文件鏈接時,Web服務器都會檢查此文件的最後寫入時間。有點給了我意志 - 應該嗎?
我們正在嘗試將時間戳附加到某些URL以緩存內容,但當它們發生更改時會更新它們。我們的代碼歸結爲:閱讀文件屬性有多昂貴? .NET
DateTime ts = File.GetLastWriteTime(absPath);
其中absPath是URL的MappedPath。因此,每次我們提供文件鏈接時,Web服務器都會檢查此文件的最後寫入時間。有點給了我意志 - 應該嗎?
你應該對它進行性能測試,但是我懷疑它比測試一個文件的存在性更昂貴(例如,它是否是隻讀的),並且肯定比實際打開文件要便宜。
如果(測試後)它確定它是一個問題,您還可以將您的呼叫緩存到GetLastWriteTime
(例如,對於任何給定文件,不要每5秒調用一次)。
另外,我從來沒有使用它,但如果緩存是一個問題,我希望你已經考慮委託其實施給像Squid這樣的專家,而不是滾動自己的。
當鏈接生成時,會產生額外的小磁盤I/O。如果你在很短的時間內創建了很多URL,這可能是一個瓶頸。沒有人可以肯定地說這是否會影響你的情況 - 你真的需要測量並確定這是否會成爲問題。
或者如果你擔心它,爲什麼不緩存一分鐘?
從本質上講,您的問題「有多貴?」有三個答案。
我們無法真正回答你的問題,所以你只需要嘗試一下。如果你認爲它太昂貴了,或者值得你花時間將它從可接受的價格轉變爲便宜的價格,那就改變問題,詢問如何加快速度。
我還沒有試過這個,但是你的問題與我一直在想的情況有關。
您沒有指出哪些數據正在改變?數據庫,xml數據等。
ASP.NET緩存確實支持基於各種依賴關係更新緩存。
在基於文件的依賴關係,基於時間的依賴關係, 和基於關鍵字的依賴關係中查看本文。
「依賴關係允許我們根據對文件的更改,對其他緩存鍵的更改或在固定時間點使緩存中的特定項失效。讓我們來看看這些依賴關係中的每一個。「
下面是文章:
http://msdn.microsoft.com/en-us/library/ms972379.aspx
感謝
喬