在这里,您需要定义延迟的真正问题。是因为您同时调用它 100 次,还是因为您的处理程序被会话锁阻塞?
所以首先考虑的是从你的处理程序中删除会话 - 如果你使用它。
其次,如果您的问题是因为您多次一起调用它,您可以通过使用mutex
和一个简单的技巧来限制它。您可以锁定处理程序以模拟仅使用同时创建 6 个缩略图mutex
。
这是一个使用互斥锁的简单代码,可以同时离开 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 应用程序在共享同一会话时处理另一个 Web 应用程序时被阻止
完全替换 ASP.Net 的会话
缓存
当然,您需要将缩略图缓存到磁盘,并为浏览器的图像设置缓存。没有理由一次又一次地创建它们。