1

我正在使用 c# 方法 Image.GetThumbnail() 来生成图像的缩略图。我必须动态生成这个缩略图。我必须为单个 galleryId 生成 100 个缩略图。所以我添加了一个 HttpHandler 来动态生成缩略图。问题是当我单击画廊 ID 时,我的 Http 处理程序有 100 个请求。所以缩略图加载非常缓慢。我有一些问题

  1. 我可以通过实现异步 Http 处理程序来提高性能吗?我不熟悉c#中的异步编程。如何使用 Http 异步处理程序生成缩略图?
  2. 是否有任何替代方法可以获得比异步编程模型更好的性能?我的意思是添加多个处理程序来处理请求,例如

谁能帮帮我吗。

4

2 回答 2

2

解决这个问题的另一种方法是首先避免它。

上传图像时生成缩略图,然后提供适当设置内容到期的准备好的缩略图。

您将节省大量处理时间,更重要的是,及时转移它,因此当用户查看图库时,您可以尽快提供缩略图。

于 2012-05-20T12:38:44.527 回答
1

在这里,您需要定义延迟的真正问题。是因为您同时调用它 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 的会话

缓存

当然,您需要将缩略图缓存到磁盘,并为浏览器的图像设置缓存。没有理由一次又一次地创建它们。

于 2012-05-20T12:34:58.140 回答