call aspx page to return an image randomly slow

OK, here is the question, I have a asp.net website, there is an aspx page called GetThumbnail.aspx, the code is like below:

string newThumbnailPath = ReaderUtilities.GetThumbnailPath(ptiId, highQuality ? ZoomLevel.L : ZoomLevel.S);
Response.Clear();
if (File.Exists(newThumbnailPath))
{
  Response.ContentType = "image/jpg";
  Response.TransmitFile(newThumbnailPath);
}

That is it. the new newThumbnailPath is a network share path, usually like D:\ImagesCache\000\0001\000123\000123456\000123456-sml-1.jpg

Then in my website there is a searchResult.aspx, when user type some keyword to search, I will display the searchresult.aspx page, inside the searchResult.aspx, I will display 10 images, the code is below:

<img rel="429746" src="/GetThumbnail.aspx?p=429746" class="cover-img draggable">

OK, the question is, everytime, on production server, there must be several images loading very slow, say 8 images load within averagely 1 second, but 2 images take 7 or 9 seconds to load. All the images are small, and they don't need to resize, I used firebug Net to check, the slow loading images' DNS lookup, Connecting and Sending are all almost 1ms, and Receiving is 200 or 300ms, but the Waiting takes 8 or 9 seconds.

I thought it is because of IO, but why most of images are quick, just some and randomly, any help. I really appreciate it.


Solution 1:

Because you use .aspx page (and not handler), and because the images loaded by browser not one by one, but many together, I suspect that you felt on the session lock of the page and that's why this delay.

Try to set EnableSessionState="false" on the page.

eg:

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" 
    AutoEventWireup="false" Inherits="WebApplication1.WebForm1" 
     EnableSessionState="false" %>

By the way, if you change the aspx page to a handler page you going to gain some more speed because the handler page did not make all the calls that a normally page do.