2

我们有一些代码允许以不同的尺寸请求图像,如果它不存在,它会以该尺寸创建并存储它。我们遇到的问题是图像不存在时的多个请求,并且它第一次尝试创建它。

虽然我们目前不在网络农场或分布在我们想要到达的多台机器上,但我们需要一种锁定该部分的方法,而只有一个线程/进程创建调整大小的图像,然后允许任何线程继续返回图像。

ASP.NET C# 中跨多个线程/机器锁定的最佳方法是什么(在网络场场景中)。我想唯一真正的选择是使用某种数据库表,我们可以将锁存储在图像文件名/id 上,但是其他线程是否必须继续调用数据库以查看锁是否已被释放?

如果有人对这种情况有任何经验,将不胜感激。我们将 ASP.NET MVC 4 与 C# 4.5 和 SQL Server 2008 一起使用。

4

1 回答 1

0

您是否计划在网络场中的每台服务器上生成相同的图像?如果没问题,那么您可以只使用 aDictionary<FileName, Key>并让任何想要创建图像的人Key首先请求 a 然后将其呈现Key给创建图像的方法。此方法将检查密钥,如果合适则生成图像,然后删除Key. Dictionary在请求 a时检查Key指定FileName的 a Key,如果已经存在则拒绝请求,否则锁定Dictionary(它需要静态),重新检查任何现有的Key,生成并将新Key插入到 中Dictionary,返回Key. 如果您只想要整个场中的一个图像实例,那么您将需要一个分布式缓存服务以及某种将图像的所有请求定向到正确服务器的方法 - 对我来说似乎破坏了耕作/负载平衡的意义

于 2013-05-10T15:18:57.900 回答