不得不说的wepapi 优化
1:在你的ASP.NET Web API中使用GZIP 或 Deflate 。
对于减少响应包的大小和响应速度,压缩是一种简单而有效的方式。
这是一个非常有必要使用的功能,你可以查看更多关于压缩的文章在我的博客 http://blog.developers.ba/asp-net-web-api-gzip-compression-actionfilter/
本人是在dll抽出源代码使用的功能。
原dll code:

1:新建过滤器(面向切面编程aop)
Code:
public class DeflateCompressionAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actContext)
{
var content = actContext.Response.Content;
var bytes = content == null ? null : content.ReadAsByteArrayAsync().Result;
var zlibbedContent = bytes == null ? new byte[] :
CompressionHelper.DeflateByte(bytes);
actContext.Response.Content = new ByteArrayContent(zlibbedContent);
actContext.Response.Content.Headers.Remove("Content-Type");
actContext.Response.Content.Headers.Add("Content-encoding", "deflate");
actContext.Response.Content.Headers.Add("Content-Type", "application/json");
base.OnActionExecuted(actContext);
}
}
public class CompressionHelper
{
public static byte[] DeflateByte(byte[] str)
{
if (str == null)
{
return null;
} using (var output = new MemoryStream())
{
using (var compressor = new DeflateStream(output, CompressionMode.Compress, true))
{
compressor.Write(str, , str.Length);
} return output.ToArray();
}
}
}
使用:以特性的方式在想要压缩的webapi方法以[xxx]方式添加。

运行结果:


解压code:
class Program
{
static void Main(string[] args)
{
string sss = HttpGet("http://localhost:16808//api/GPSStatus/GetListHis?i=1&flag=0&pageIndex=1&pageSize=10", true); } public static string HttpGet(string url, object par = null, bool IsGZip = false)
{
WebRequest request = null;
WebResponse response = null;
try
{
//创建请求
request = HttpWebRequest.Create(url);
request.Method = "GET";
request.ContentType = "application/json";
request.Credentials = CredentialCache.DefaultCredentials;
request.Timeout = ;
response = request.GetResponse();
string result = null;
if (IsGZip)
{
using (var stream = response.GetResponseStream())
{
byte[] bytes = new byte[response.ContentLength];
stream.Read(bytes, , bytes.Length);
result = UnJy(bytes);
}
}
else
{
using (StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
result = sr.ReadToEnd();
}
return result;
}
catch (Exception)
{
return null;
}
finally
{
if (response != null) response.Close();
if (request != null) request.Abort();
}
} /// <summary>
/// 解压
/// </summary>
public static string UnJy(byte[] by)
{
using (MemoryStream stream = new MemoryStream(by))
{
Stream decompressor = new DeflateStream(stream, CompressionMode.Decompress);
return UncompressString(by, decompressor);
}
} private static string UncompressString(byte[] compressed, Stream decompressor)
{
byte[] buffer = new byte[0x400];
Encoding encoding = Encoding.UTF8;
using (MemoryStream stream = new MemoryStream())
{
using (decompressor)
{
int num;
while ((num = decompressor.Read(buffer, , buffer.Length)) != )
{
stream.Write(buffer, , num);
}
}
stream.Seek(0L, SeekOrigin.Begin);
StreamReader reader = new StreamReader(stream, encoding);
return reader.ReadToEnd();
}
} public class CompressionHelper
{
public static byte[] DeflateByte(byte[] str)
{
if (str == null)
{
return null;
} using (var output = new MemoryStream())
{
using (var compressor = new DeflateStream(output, CompressionMode.Compress,true))
{
compressor.Write(str, , str.Length);
} return output.ToArray();
}
}
}
}
当然你也可以使用文章开头的链接直接附加Dll
其他的优化。
http://www.oschina.net/translate/8-ways-improve-asp-net-web-api-performance
不得不说的wepapi 优化的更多相关文章
- MSSQL中IN是否用索引.....[转]
作者:no_mIss 用MSSQL时间快一年了,数据量有时会相对比较多,所以经常要优化,也看过很多资料,但大都有一句:IN.NOT IN不用索引,今天发此贴希望能有人参与讨论,到底IN用不用索引,如果 ...
- 【题解】Coins(二进制拆分+bitset)
[题解]Coins(二进制拆分+bitset) [vj] 俗话说得好,bitset大法吼啊 这道题要不是他多组数据卡死了我复杂度算出来等于九千多万的选手我还不会想这种好办法233 考虑转移的实质是怎样 ...
- noip模拟30[毛毛毛探探探]
\(noip模拟30\;solutions\) 所以说,这次被初中的大神给爆了????? 其实真的不甘心,这次考场上的遗憾太多,浪费的时间过多,心情非常不好 用这篇题解来结束这场让人伤心的考试吧 \( ...
- 03.SQLServer性能优化之---存储优化系列
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 概 述:http://www.cnblogs.com/dunitian/p/60413 ...
- MySQL优化聊两句
原文地址:http://www.cnblogs.com/verrion/p/mysql_optimised.html MySQL优化聊两句 MySQL不多介绍,今天聊两句该如何优化以及从哪些方面入手, ...
- MySQL大数据优化
我们考虑的情况是在你的数据量很大的情况下,千万级别的数据量.不要当我们的请求响应时间已经让我无法忍受的时候,再来想起来优化,可能有点迟了.因为可能会丢失很多潜在的价值客户.所以,在我们当初设计表,或者 ...
- Java开发代码性能优化总结
代码优化,可能说起来一些人觉得没用.可是我觉得应该平时开发过程中,就尽量要求自己,养成良好习惯,一个个小的优化点,积攒起来绝对是有大幅度效率提升的.好了,将平时看到用到总结的分享给大家. 代码优化的目 ...
- 开发 ASP.NET vNext 续篇:云优化的概念、Entity Framework 7.0、简单吞吐量压力测试
继续上一篇<开发 ASP.NET vNext 初步总结(使用Visual Studio 2014 CTP1)>之后, 关于云优化和版本控制: 我本想做一下MAC和LINUX的self-ho ...
- MYSQL索引结构原理、性能分析与优化
[转]MYSQL索引结构原理.性能分析与优化 第一部分:基础知识 索引 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里, 不用一页一页 ...
随机推荐
- Leetcode分类刷题答案&心得
Array 448.找出数组中所有消失的数 要求:整型数组取值为 1 ≤ a[i] ≤ n,n是数组大小,一些元素重复出现,找出[1,n]中没出现的数,实现时时间复杂度为O(n),并不占额外空间 思路 ...
- JSONP跨域操作
JSP <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3. ...
- virtualenv 安装使用
不同的人喜欢用不同的方式建立各自的开发环境,但在几乎所有的编程社区,总有一个(或一个以上)开发环境让人更容易接受. 使用不同的开发环境虽然没有什么错误,但有些环境设置更容易进行便利的测试,并做一些 ...
- 通过一个实例重新认识引用类型,值类型,数组,堆栈,ref
昨天在写代码时候遇到了一个问题,百思不得其解,感觉颠覆了自己对C#基础知识的认知,因为具体的情境涉及公司代码不便放出,我在这里举个例子,先上整个测试所有的代码,然后一一讲解我的思考过程: using ...
- jQuery_mobile页面跳转事件学习
<html> <head> <meta http-equiv="Content-Type" content="t ...
- html javascript css3 php3.2.3离线手册
各位新年快乐! 愿大家"愿有前程可奔赴,也有岁月可回头"! 发现个离线手册很全的网站,分享大家,也mark自用. http://www.shouce.ren/ 手册网
- Android Studio中的CmakeList NDK配置
Android Studio2.2之后直接可以在创建工程时添加NDK支持了,添加之后,main文件夹下会多出一个native-lib.cpp这个文件,如果只为了一个简单的NDK接口,貌似这就结束了.直 ...
- django进阶
路由系统 简而言之,django的路由系统作用就是使views里面处理数据的函数与请求的url建立映射关系.使请求到来之后,根据urls.py里的关系条目,去查找到与请求对应的处理方法,从而返回给客户 ...
- 美团大众点评服务框架Pigeon
服务框架Pigeon架构 • Pigeon提供jar包接入 ,线上运行在tomcat里 • Monitor-CAT ,负责调用链路分析.异常监控告警等 • 配置中心-Lion ,负责一些开关配置读取 ...
- Nginx配置(全)
安装 * windows下:直接到官网下载windows下的稳定版本,解压到任意位置即可 * Linux下:一种方式是yum或者sudo apt-get install 另一种是源码编译安装,先安装p ...