在我的網站中,我使用控制器來生成圖像的縮略圖。我的代碼如下所示:鎖定檢查現有文件部分
var filePath = getThumbnailPath();
if (!File.Exists(filePath)
{
... create thumbnail
}
return new Filestream(...)
的問題是,如果兩個用戶請求相同的縮略圖和創建時,如果不創建我會得到異常。 如何在不引入太多開銷的情況下高效地在文件名對象上使用鎖定? Aristos的的評論後
重構的代碼:
Mutex m = new Mutex(false, originalImagePath);
m.WaitOne();
try
{
if (!File.Exists(originalImagePath))
{
... create thumbnail
}
}
finally
{
m.ReleaseMutex();
}
我會使用一個隊列,並可能是一個小緩存,所以你會得到它一次,第二個請求會從緩存中得到它。 – 2012-08-08 18:25:41
我使用互斥體來鎖定縮略圖的創建,我也將圖像文件名稱作爲互斥體的名稱,並且我沒有任何瓶頸。對於我的縮略圖,我保留了它(緩存)並在下一次請求中提供。 – Aristos 2012-08-08 19:11:46
恥辱對我來說......互斥正是我所需要的。你可以發佈一些代碼...爲接受的答案...我相信你會爲像我這樣的其他人節省一天。 – 2012-08-08 19:55:40