2011-09-21 97 views
1

看看我的web應用程序,當它被全部編譯並準備好部署時,我擁有一堆.ASPX和.ASHX文件。 ASHX文件當然是我爲非常具體的實例製作的一些自定義處理程序,他們可能是圖像處理程序或其他我不想要整個Page類生命週期的其他東西。編譯部署ASHX文件?

我注意到.ASPX文件將所有HTML內容(所有標記)和.aspx.cs文件編譯爲.DLL文件(如預期的那樣),它只是加載到IIS中。太棒了。

但我也看到.ASHX文件就是它們的樣子。所有代碼都在我的.ASHX文件中,並且這是與部署到我的服務器的文件夾完全相同的文件。沒有編譯的DLL或任何東西。

所以問題是這樣的:.SHX文件執行較慢,因爲它有點解釋文件?我知道我可能是錯誤的,但沒有什麼編譯看起來像.ASHX文件,我最初使用它們的速度。或者代碼是由IIS一次編譯到內存中並保存在那裏供以後使用?或者,這也許是IsReusable布爾是屬性是什麼?

回答

2

它們已編譯好,所以性能不會成爲問題。

但是,可以使用與.aspx文件等相同的方式對.ashx文件使用代碼隱藏。在您的.ashx文件:

<%@ WebHandler 
    Language="C#" 
    CodeBehind="UserImageHandler.ashx.cs" 
    Class="Namespace.UserImageHandler" %> 

,然後在後臺代碼:

using System; 
using System.Web; 
// more here if you need them... 

namespace Namespace 
{  
    public class UserImageHandler : IHttpHandler 
    { 
     public void ProcessRequest(HttpContext context) 
     { 
      // etc. etc.  
     } 

     public bool IsReusable 
     { 
      get 
      { 
       return false; 
      } 
     }  
    } 
} 

這樣做,這樣,而不是內聯可以讓生活更容易,如果你有很多的代碼。

+0

我想我會做這樣的事情。編譯時,類UserImageHandler會被編譯成DLL嗎?如果是這樣,那將是我的解決方案。 ASHX將只是一行參考。 –

+0

是的,它會被編譯到DLL中。 –

+0

但'CodeBehind =「UserImageHandler.ashx.cs」'在'WebSite'(而不是'WebApplicationProject')中不工作? – Sreekumar

0

據我所知,ashx文件是一個請求位置,它只是將請求引導到後面的代碼(編譯爲其他所有內容)。

所以是的,ashx文件可能會第一次慢一點,因爲它是根據請求編譯的。但性能最低 - 一個簡單的重定向到代碼塊。

+0

是的,但問題是背後的代碼實際上是在我的情況下的ASHX文件(它沒有編譯)。它是ASHX文件的一部分。它基本上是我在開發時看到的一個直接副本。 –

+0

對不起 - 我沒有明白。沒有必要在前面有代碼,但無論如何,它將在第一次調用時編譯,然後與其他頁面文件一樣高效。 –