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

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

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

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

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

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

  public class NewServices : IHttpHandler
{
private static readonly IDictionary<string, MethodInfo> Services = new Dictionary<string, MethodInfo>(StringComparer.OrdinalIgnoreCase); public void ProcessRequest(HttpContext context)
{
var action = context.Request["action"];
MethodInfo method;
if (action.IsNotNullAndWhiteSpace() && Services.TryGetValue(action, out method))
{
try
{
method.Invoke(new NewServicesApi(context), null);
}
catch (Exception ex)
{
context.WriteJson(new JsonResultInfo().SetError(ex.Message));
}
}
else
{
context.WriteJson(new JsonResultInfo().SetError("{0}方法不存在!".FormatWith(action)));
}
} static NewServices()
{
Services.Clear();
var methods = typeof(NewServicesApi).GetMethods(BindingFlags.Public | BindingFlags.Instance);
foreach (var m in methods)
{
Services.Add(m.Name, m);
}
}
public bool IsReusable { get { return false; } }
} internal class NewServicesApi
{
private HttpContext context;
private HttpRequest Request;
private HttpResponse Response;
public NewServicesApi(HttpContext context)
{
this.context = context;
Request = context.Request;
Response = context.Response;
}
public void Test()
{
Response.Write("test");
}
}

asp.net 一般处理程序小优化的更多相关文章

  1. .net mvc 站点自带简易SSL加密传输 Word报告自动生成(例如 导出数据库结构) 微信小程序:动画(Animation) SignalR 设计理念(一) ASP.NET -- WebForm -- ViewState ASP.NET -- 一般处理程序ashx 常用到的一些js方法,记录一下 CryptoJS与C#AES加解密互转

    .net mvc 站点自带简易SSL加密传输   因项目需要,传输数据需要加密,因此有了一些经验,现简易抽出来分享! 请求:前端cryptojs用rsa/aes 或 rsa/des加密,后端.net ...

  2. 【原创】构建高性能ASP.NET站点之二 优化HTTP请求(前端)

    原文:[原创]构建高性能ASP.NET站点之二 优化HTTP请求(前端) 构建高性能ASP.NET站点之二 优化HTTP请求(前端) 前言: 这段时间比较的忙,文章写不是很勤,希望大家谅解. 上一篇文 ...

  3. ASP.NET 性能监控工具和优化技巧

    转载自:http://blog.haoitsoft.com/index.php/archives/657 ASP.NET 性能监控工具和优化技巧 发表回复 为了阐明准确甄别性能问题的重要性,下面列举了 ...

  4. ASP.NET MVC 3 网站优化总结(三)Specify Vary: Accept-Encoding header

    继续进行 ASP.NET MVC 3 网站优化工作,使用 Google Page 检测发现提示 You should Specify Vary: Accept-Encoding header,The ...

  5. ASP.NET MVC 3 网站优化总结(一) 使用 Gzip 压缩

    网站开启 Gzip 压缩的好处相信很多人都已经清楚,这样做可以提高网站的性能.那么为什么很多网站没有开启 Gzip 压缩功能呢?原因有4点:防病毒软件.浏览器 bug.网站代理和服务器未配置. 使用 ...

  6. ASP.NET MVC 3 网站优化总结(六)压缩 HTML

    压缩 html 可以去除代码中无用的空格等,这样可提高网站的加载速度并节省带宽.今天就让我们看看在 ASP.NET MVC 3 怎么实现 html 压缩,我们可通过实现 ActionFilter 来完 ...

  7. asp.net 实现“九连环”小游戏

    asp.net 实现"九连环"小游戏 wildcatsky(原作) public Class ChinaRing1  Inherits System.Web.UI.Page #Re ...

  8. SPFA 小优化*2

    /* bzoj 2763 SPFA小优化 循环队列+SLF 顺面改掉自己之前手打qeueu的坏毛病*/ #include<iostream> #include<cstring> ...

  9. 缓存 Array.length 是老生常谈的小优化

    问题 缓存 Array.length 是老生常谈的小优化. // 不缓存 for (var i = 0; i < arr.length; i++) { ... } // 缓存 var len = ...

随机推荐

  1. Hive索引

    1.        Hive索引概述 Hive的索引目的是提高Hive表指定列的查询速度. 没有索引时.类似'WHERE tab1.col1 = 10' 的查询.Hive会载入整张表或分区.然后处理全 ...

  2. js实现日期的相加减

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  3. IOS obj-c、c、c++混编

    今天发现这个问题,上网找了一下资料,发现原来如下: .m 文件可以混合c 和 objective-c 代码 .mm  文件可以混合 c c++ objective-c 代码 .c  .cpp  不能混 ...

  4. 数组名和指针的深入理解(C++)

    指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用.于是乎,很多程序设计者就被搞糊涂了.魔幻数组名请看程序(本文程序在WIN32平台下编译): #includ ...

  5. JavaSE学习总结第26天_网络编程

      26.01  网络编程概述 网络编程:就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换. 26.02  网络模型概述和图解 计算机网络之间以何种规则进行通信,就是网络模型研究问题. ...

  6. If We Were a Child Again

    Description The Problem The first project for the poor student was to make a calculator that can jus ...

  7. Spring 之 控制反转(IoC), 依赖注入(DI)和面向切面(AOP)

    关于依赖注入, 这篇博文写的非常简单易懂. https://github.com/android-cn/blog/tree/master/java/dependency-injection 此外, 博 ...

  8. javascript函数querySelector

    querySelector用于获得dom节点,可以接受三种类型的参数:id(#),class(.),标签.很像jquery的选择器.不过只能返回一个子孙元素,但是jquery选择器的话,可以返回一组元 ...

  9. Codeforces 116C - Party(dfs)

    n个人,每个人之多有一个上司.“上司”关系具有传递性.求最少将人分成多少组,每组中的每个人的上司或者间接上司都不在该组.拿到题就用树的直径wa了一炮... 正解是有向无环森林的最长路.从每个跟节点df ...

  10. sql server 常见问题

    自动生成的值 @@identity 存储过程参数应指定参数长度,且不大于数据库长度,自定义方法里如果有参数,也应指定长度,否则会报错,提取数据长度被断 connectionString 可以指定app ...