• asp.net 一般处理程序小优化


    使用asp.net mvc习惯了,最近项目中又开始使用asp.net,有大量的ajax方法调用,之前有两种方法来处理:

    1. Switch case :方法少还行,如果很多,就太蛋疼了,而且方法堆在一块,也不美观
    2. 匿名方法:方法复用不好,vs代码也不便于折叠

    最近研究了一下用反射方法来做,把类中所有公开方法都通过反射找出存到字典中,调用时匹配字典中的key,看是否有此方法。

    以下是我写的方法,这种方法我总结有以下优点:

    1. 不用大量写大量判断语句,简洁
    2. 方法可以复用
    3. 可以集中处理一些事情,如调用前监控,处理;异常处理;...
    4. 如果有不同实现,可以调用不同的接口(虚方法)的实现(我这里为了省事,没有用接口)

    但是我不知道这样写,会不会有性能损耗,是否还有优化的地方,欢迎大家指点。

     1  public class NewServices : IHttpHandler
     2     {
     3         private static readonly IDictionary<string, MethodInfo> Services = new Dictionary<string, MethodInfo>(StringComparer.OrdinalIgnoreCase);
     4 
     5         public void ProcessRequest(HttpContext context)
     6         {
     7             var action = context.Request["action"];
     8             MethodInfo method;
     9             if (action.IsNotNullAndWhiteSpace() && Services.TryGetValue(action, out method))
    10             {
    11                 try
    12                 {
    13                     method.Invoke(new NewServicesApi(context), null);
    14                 }
    15                 catch (Exception ex)
    16                 {
    17                     context.WriteJson(new JsonResultInfo().SetError(ex.Message));
    18                 }
    19             }
    20             else
    21             {
    22                 context.WriteJson(new JsonResultInfo().SetError("{0}方法不存在!".FormatWith(action)));
    23             }
    24         }
    25 
    26         static NewServices()
    27         {
    28             Services.Clear();
    29             var methods = typeof(NewServicesApi).GetMethods(BindingFlags.Public | BindingFlags.Instance);
    30             foreach (var m in methods)
    31             {
    32                 Services.Add(m.Name, m);
    33             }
    34         }
    35         public bool IsReusable { get { return false; } }
    36     }
    37 
    38     internal class NewServicesApi
    39     {
    40         private HttpContext context;
    41         private HttpRequest Request;
    42         private HttpResponse Response;
    43         public NewServicesApi(HttpContext context)
    44         {
    45             this.context = context;
    46             Request = context.Request;
    47             Response = context.Response;
    48         }
    49         public void Test()
    50         {
    51             Response.Write("test");
    52         }
    53     }
  • 相关阅读:
    Spring spEL
    Spring 使用外部部署文件
    Spring 自动装配
    spring 属性配置细节
    hdu 1054 Strategic Game
    fzu 2037 Maximum Value Problem
    将博客搬至CSDN
    HDU 4714 Tree2Cycle
    HDU 1009 The Shortest Path in Nya Graph
    POJ 1942 Paths on a Grid 组合数的优化
  • 原文地址:https://www.cnblogs.com/lizhanglong/p/3945727.html
Copyright © 2020-2023  润新知