关于.net中ashx文件访问 与 web.config通过handlers配置访问的性能比较

在.Net中,访问一个IHttpHandler类, 有三种方式。

a. 直接添加 xx.ashx / xx.ashx.cs 文件,将IHttpHandler类写在  xx.ashx.cs 中。

b.在web.config的handlers节点中配置路由。

c.在.Net编程中修改路由表。

本文主要是测试方法a 与 方法b的性能差别;

     1. 我们通过test2.ashx实现ashx文件访问,

      2. 通过test3.ashx模拟路由访问。

      3. addReport.cs 同时为test2.ashx 与 test3.ashx 提供相同的访问支持,这样保证性能一致。

      4. 建立一个test.htm 页面,在此页面中通过ajax同步请求测算时间。 

测试代码:

 文件:  test2.ashx 

<%@ WebHandler Language="C#" CodeBehind="addReport.ashx.cs" Class="view.demo.addReport" %>

文件:addReport.cs

using System;
using System.Web;
namespace view.demo
{
	public class addReport : IHttpHandler
	{
		public bool IsReusable { get { return true; } }

		public void ProcessRequest(HttpContext context)
		{
			context.Response.Write(DateTime.Now.ToString());
		}
	}
}

文件: web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="Route1" path="test3.ashx" verb="*" type="view.demo.addReport"/>
        </handlers>
    </system.webServer>
</configuration>

文件:test.html

<script>
	function  TryRequest(url)
	{
		var d1 = new Date();
		var t1 = d1.getTime();
		for(var i = 0; i<1000; i++) 
		{
			var xhttp = new XMLHttpRequest();
			xhttp.open("GET", url + "?t=" +  t1 ,  false );
			xhttp.send();
			xhttp = null;
		}
		var d2 = new Date();
		return d2.getTime()- d1.getTime() ;
	}
	function TryGetTimeRange() {
		var url1 = "test2.ashx"; //ashx  文件
	    var url2 = "test3.ashx"; //ashx  路由
		var r1 = TryRequest(url1);
		var r2 = TryRequest(url2);
		document.getElementById("test2").innerHTML = r1;
		document.getElementById("test3").innerHTML = r2;
	} 
</script>
<div id='test2'></div>
<div id='test3'></div>
<button onclick='TryGetTimeRange()'>Start</button>

测试结果(3次):

关于.net中ashx文件访问 与 web.config通过handlers配置访问的性能比较

关于.net中ashx文件访问 与 web.config通过handlers配置访问的性能比较

关于.net中ashx文件访问 与 web.config通过handlers配置访问的性能比较

从三次测试结果来看,差别非常小,1000次的访问只有10-20毫秒的差别,而且各有胜负。原本以为ashx 文件模式下每次请求会有IO消耗,但实际上Net内部应该建立了缓存机制,只读一次。

自己动手,丰衣足食。

 

 

上一篇:上传文件-layui+ashx


下一篇:asp.net 路由映射到ashx