使用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. 怎样注册uber司机 如何注册uber司机 最新详细攻略

    怎样注册uber司机 如何注册加入uber司机 全国加入Uber 的要求 车辆要求:要求裸车价8万以上,车龄5年以内,第三者责任险保额30万以上,不支持20万以下的面包车/商务车,不支持4座以下车辆. ...

  2. unity3d插件Daikon Forge GUI 中文教程-5-高级控件listbox和progress bar的使用

    (游戏蛮牛首发)大家好我是孙广东.官网提供了专业的视频教程http://www.daikonforge.com/dfgui/tutorials/,只是是在youtube上,要观看是须要FQ的. 只是教 ...

  3. Servlet 的基本架构

    import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpSer ...

  4. mysql 时间差问题集锦

    SELECT * from grouptoadd where taskid = '103244'; select datediff(max(spreadtime),min(createtime)) f ...

  5. Hibernate学习之映射关系

    一.Hibernate多对一关联映射:就是在“多”的一端加外键,指向“一”的一端. 比如多个学生对应一个班级,多个用户对应一个级别等等,都是多对一关系. 1.“多”端实体加入引用“一”端实体的变量及g ...

  6. Java 网络编程(Elliotte Rusty Harold)

    最近看了本Java网络编程方面的书,系统化一下Java网络编程,主要内容如下: 1.网络基础篇 这里包括基础的网络概念/ 输入输出流BIO/ Internet地址/URI/URL/HTTP/URLCo ...

  7. MYSQL存储过程事务列子

    CREATE DEFINER=`root`@`localhost` PROCEDURE `createBusiness`(parameter1 int) BEGIN #Routine body goe ...

  8. mybatis CRUD

    方法一:通过配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBL ...

  9. JS性能

    获取以下属性  会等待对应元素渲染完成  才继续执行 * offsetTop, offsetLeft, offsetWidth, offsetHeight* scrollTop, scrollLeft ...

  10. sql server 常见问题

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