2011-04-17 93 views
0

这一次将是有趣......asp.net动态生成缩略图图像的并发性问题

我见过很多asp.net生成缩略图教程/示例代码,但产生时,没有人考虑过的并发访问的问题当一个或多个用户在需要生成缩略图时访问同一页面时,动态地缩略图图像。

一个简单的例子,我有一个网站的财产图像(房屋等),图像存储在一个文件夹中,当有人第一次访问特定优惠时产生缩略图(用于图库),然后处理程序使缩略图从原始较大的图像中,处理程序仅生成一次每个缩略图,然后在进一步的请求中使用生成的图像。

如果两个用户在同一时间访问此页面会发生什么情况,处理程序可能会在同一文件上运行两次或更多,可能存在并发问题,文件打开错误等等(需要为缩略图生成打开文件)。

通常一个用户获取缩略图等获得无图像的空白框,直到他们刷新页面(因为第一个用户触发的创建缩略图)

所以,问题是,如何避免这种情况?

回答

2

通常,如果您只打开原始图像文件进行读取以生成缩略图,则没有问题可以同时进行。多个用户可以同时打开同一个文件进行阅读。如果您同时开始写作,则会出现问题。

+0

是和否是的 - 在同一时间写入时可能会出现问题,否 - 缩略图无法以100%保存,浏览器将尝试同样读取未保存的缩略图。另外为了防止同时写作,你需要防止同时打开,我认为答案并不那么简单。 – Programista 2011-04-17 22:02:15

+0

@Programista,生成的缩略图是每个用户都不同的副本。在这种情况下唯一的共享资源是文件本身,正如我所说的从文件中并发读取不会造成任何问题。在这种情况下,您从不写入相同的共享资源。每个用户向服务器发送请求,服务器读取共享资源并生成写入响应的缩略图。如果另一个用户同时执行相同的请求,则将访问相同的共享资源进行读取,同一缩略图的新副本将生成并发送给此用户。 – 2011-04-17 22:09:42

+0

第一个用户在浏览器中做了什么(不管他是否保存了一半)并不重要,它不会影响第二个用户。如果您的网站允许用户上传生成缩略图的文件,则可能会出现问题。在这种情况下,您有两种情况:用户可以更新现有文件,并且用户只能添加新文件。在第一种情况下,显然可能会有冲突,而在第二种情况下,不会,因为除非您将文件存储在服务器上,否则不会向可能从中生成缩略图的其他用户提供ID。 – 2011-04-17 22:12:22