【问题标题】:ASHX Files Compiled For Deployment?为部署而编译的 ASHX 文件?
【发布时间】:2011-09-21 14:46:38
【问题描述】:

查看我的 Web 应用程序,当它全部编译并准备好部署时,我的文件夹中有一堆 .ASPX 和 .ASHX 文件。 ASHX 文件当然是我为非常特定的实例制作的一些自定义处理程序,它们可以是图像处理程序或其他我不想要整个 Page 类生命周期的东西。

我注意到 .ASPX 文件具有所有 HTML 内容(所有标签),并且 .aspx.cs 文件被编译成 .DLL 文件(如预期的那样),这些文件刚刚加载到 IIS 中。太好了。

但我也看到 .ASHX 文件就是这样。所有代码都在我的 .ASHX 文件中,并且与部署到我的服务器的文件夹中的文件完全相同。没有编译的 DLL 或任何东西。

所以问题是这样的: .ASHX 文件是否因为有点像解释文件而执行较慢?我知道我可能错了,但似乎没有为 .ASHX 文件编译,我最初使用它们是为了提高速度。或者代码是否被 IIS 编译到内存中并保存在那里供以后使用?或者这可能是 IsReusable bool is property 的用途?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    它们已编译,因此性能不会成为问题。

    但是,可以以与 .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;
                }
            }    
        }
    }
    

    如果您有大量代码,以这种方式代替内联可以让生活更轻松。

    【讨论】:

    • 我想我会做这样的事情。编译时,类UserImageHandler会编译成DLL吗?如果是这样,那将是我的解决方案。 ASHX 将只是一个单行引用。
    • 是的,它会被编译成DLL。
    • 但是CodeBehind="UserImageHandler.ashx.cs"WebSite 中不起作用(不是WebApplicationProject)??
    【解决方案2】:

    据我了解,ashx 文件是一个请求位置,它只是将请求定向到后面的代码(编译为其他所有代码)。

    所以是的,第一次 ashx 文件可能会稍微慢一些,因为它是根据请求编译的。但是对性能的影响很小 - 一个简单的重定向到代码块。

    【讨论】:

    • 是的,但关键是后面的代码实际上在我的情况下的 ASHX 文件中(未编译)。它是 ASHX 文件的一部分。它基本上是我在开发时看到的内容的直接副本。
    • 抱歉 - 我没听懂。前面不需要有代码,但不管怎样,第一次调用它就会编译,然后和其他任何页面文件一样高效。
    猜你喜欢
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 2022-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多