我正在使用c#方法Image.GetThumbnail()来生成图像的缩略图。我必须动态生成此缩略图。我必须为单个galleryId生成100个缩略图。所以我添加了一个HttpHandler来动态生成缩略图。问题是当我点击一个库时我有一个100请求进入我的Http处理程序。所以缩略图加载速度非常慢。我有一些问题
任何人都可以帮助我。
答案 0 :(得分:2)
解决这个问题的另一种方法是首先避免它。
在上传图像时生成缩略图,然后只提供适当设置了内容到期的就绪缩略图。
您将节省大量处理,更重要的是,及时更改处理,因此当用户查看图库时,您可以尽快提供缩略图。
答案 1 :(得分:1)
在这里,您需要定义延迟的真正问题。是因为你在同一时刻调用它100次,还是因为你的处理程序被会话锁定阻止了?
首先想的是从你的处理程序中删除会话 - 如果你使用它。
其次,如果您的问题是因为您一起多次调用它,则可以使用mutex
和一个简单的技巧来限制它。您可以使用mutex
锁定处理程序以仅模拟同时创建6个缩略图。
这是一个使用互斥锁的简单代码,可以同时运行n个线程来运行
static var random = new Random(DateTime.Now.Ticks);
public void ProcessRequest_NoCatch (HttpContext context)
{
// here we made names like ThubNum_0, ThubNum_1, ThubNum_2 ... ThubNum_4
// with 4 you have average 4 simulated thubs
string sMyMutexName = string.Format("ThubNum_{0}", random.Next(0, 4))
var mut = new Mutex(true, sMyMutexName);
try
{
// Wait until it is safe to enter.
mut.WaitOne();
// here you create your thubs
}
finally
{
// Release the Mutex.
mut.ReleaseMutex();
}
}
查看会话如何阻止其他页面: Web app blocked while processing another web app on sharing same session
Replacing ASP.Net's session entirely
您需要将缩略图缓存到磁盘,并为浏览器的图像设置缓存。没有理由一次又一次地创建它们。