使用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. 2013第四届蓝桥杯决赛Java高职高专组题目以及解法答案

    2013第四届蓝桥杯决赛Java高职高专组题目以及解法答案 不知不觉离决赛都过去一个月了,一直忙于各种事情,都忘记整理一份试题.当作回忆也好. 1. 标题:好好学习 汤姆跟爷爷来中国旅游.一天,他帮助 ...

  2. swith 语句详解

    switch 语句的格式: switch ( 整型或字符型变量 ) { case 变量可能值1 :   分支一; break; case 变量可能值2 :   分支二; break; case 变量可 ...

  3. w3c教程

    http://www.w3cfuns.com/course.php http://www.w3cfuns.com/home.php?mod=space&uid=5434413&do=b ...

  4. WINFORM Tootip使用小结

    toolTip1.Active = true;   //激活工具提示,只有激活才会显示提示 toolTip1.IsBalloon = true;    //toolTip以气泡形式出现 toolTip ...

  5. iOS 技能集结号

    1. 获取磁盘总空间大小 2. 获取磁盘可用空间大小 3. 获取指定路径下某个文件的大小 4. 获取文件夹下所有文件的大小 5. 获取字符串(或汉字)首字母 6. 将字符串数组按照元素首字母顺序进行排 ...

  6. error C2018: unknown character '0xa1'

    调试程序时出现 error C2018: unknown character '0xa1',代码行中加入的有编译器不能识别的字符,才发现由空格引起的,删除掉就ok了.

  7. JavaSE_ 面向对象 总目录(7~10)

    JavaSE学习总结第07天_面向对象2 07.01 成员变量和局部变量的区别07.02 方法的形式参数是类名的调用07.03 匿名对象的概述和应用07.04 封装的概述07.05 封装的好处和设计原 ...

  8. 操作百度API

    string json = ""; try { //虽然两者都是异步请求事件,但是WebClient是基于事件的异步,而HttpWebRequst是基于代理的异步编程 WebCli ...

  9. poj2032Square Carpets(IDA* + dancing links)

    题目请戳这里 题目大意:给一个H行W列的01矩阵,求最少用多少个正方形框住所有的1. 题目分析:又是一个红果果的重复覆盖模型.DLX搞之! 枚举矩阵所有的子正方形,全1的话建图.判断全1的时候,用了一 ...

  10. LintCode-乱序字符串

    题目描述: 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram).如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中. 注意事项 所有的字符串都只包含小写字 ...