不得不说的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高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里, 不用一页一页 ...
随机推荐
- jquery-读取form表单中的所有数据列表
代码: <script> $(function() { $('#submit').click(function() { var d = {}; var t = $('form').seri ...
- 【转】Tomcat启用HTTPS协议配置过程
转载请注明出处: http://blog.csdn.net/gane_cheng/article/details/53001846 http://www.ganecheng.tech/blog/530 ...
- Gc.Db之循序渐进
距离上次写Gc.Db框架已经有一段时间了,最近默默对框架代码已经做了不少优化和功能,且已经提交至nuget,大家如果想使用此框架,可以通过nuget搜索:Gc.Db进行下载和安装包. 本篇文章主要是介 ...
- Genymotion安装问题
今天安装虚拟机各种报错,网上收了各种资料,然而并不能解决问题.啥也没干整整一天总算找到解决方案解决. 解决方法︰ 删除所有以前的虚拟框适配器 转到设备管理器中,单击"操作" ...
- install scrapy-redis on centos
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmrpm -ivh epel-release- ...
- linux: 常用copy 命令
1.scp 2.递归复制: \cp -r backup/* /root/tomcat8/webapps/zefun/ngViews/wechat/ p.p1 { margin: 0.0px 0.0p ...
- php+swoole+websocket
//创建websocket服务器对象,监听0.0.0.0:9502端口 $ws = new swoole_websocket_server("0.0.0.0", 9502); // ...
- 常用的js方法,包括表单校验的一些方法
/** * 对JSON对象转换为字符串. * @param {json对象} json * @return {json字符串} */ function jsonObj2Str(json) { var ...
- Java集合之LinkedHashMap
一.初识LinkedHashMap 上篇文章讲了HashMap.HashMap是一种非常常见.非常有用的集合,但在多线程情况下使用不当会有线程安全问题. 大多数情况下,只要不涉及线程安全问题,Map基 ...
- SQL创建流水号
创建流水号表 CREATE TABLE SystemSerialNo ( SerialNoId INT PRIMARY KEY IDENTITY, TableName VARCHAR(60), Pre ...