0

0

8 种提升 ASP.NET Web API 性能的方法

伊谢尔伦

伊谢尔伦

发布时间:2016-11-24 13:06:34

|

1746人浏览过

|

来源于php中文网

原创

 asp.net web api 是非常棒的技术。编写 web api 十分容易,以致于很多开发者没有在应用程序结构设计上花时间来获得很好的执行性能。

  在本文中,我将介绍8项提高 ASP.NET Web API 性能的技术。

 1) 使用最快的 JSON 序列化工具

JSON 的序列化对整个 ASP.NET Web API 的性能有着关键性的影响。 在我的一个项目里,我从 JSON.NET 序列化工具转到了 ServiceStack.Text 有一年半了。

  我测量过,Web API 的性能提升了20%左右。 我强烈建议你去尝试一下这个序列化工具。这里有一些最近的流行序列化工具性能的比较数据。

2096.jpg

  来源: theburningmonk

  更新: 似乎It seams that StackOverflow 使用了他们号称迄今为止最快的 JSON 序列化工具 Jil。 一测试数据可参见他们的GitHub page Jil serializer.

 2)从DataReader中手动串行化JSON

 我已经在我的项目中使用过这种方法,并获得了在性能上的福利。

  你可以手动地从DataReader创建JSON字符串并避免不必要的对象创建,这样你就不用从DataReader中取值并写入对象,再从这些对象中取值并使用JSON Serializer产生JSON.

  使用StringBuilder产生JSON,并在结尾处返回StringContent作为在WebAPI中响应的内容。

var response = Request.CreateResponse(HttpStatusCode.OK);
 
response.Content = new StringContent(jsonResult, Encoding.UTF8, "application/json");
 
return response;

 你可以在 Rick Strahl’s blog查看更多方法

 3)尽可能使用其它协议格式 (protocol buffer, message pack)

  如果你能给在你的工程中使用其它消息格式,如 Protocol Buffers 或MessagePack   而不是使用JSON这种协议格式。

  你将能给获取到巨大的性能优势,不仅是因为Protocol Buffers 的序列化是非常快,而且比JSON在返回的结果格式化要更快。

 4) 实现压缩

  在你的ASP.NET Web API中使用GZIP 或 Deflate 。

  对于减少响应包的大小和响应速度,压缩是一种简单而有效的方式。

  这是一个非常有必要使用的功能,你可以查看更多关于压缩的文章在我的博客 ASP.NET Web API GZip compression ActionFilter with 8 lines of code.

百堂数字点卡程序
百堂数字点卡程序

商品分类、分级,可以销售各种游戏、娱乐卡,甚至电话卡等1、方便简洁的购卡、显示卡号流程 2、自动从预付款中扣除金额,自动显示卡号等3、帐户余额显示、提醒4、历史订单管理、浏览5、会员密码加密,增强系统的安全性6、商品订单明细清晰,应付款项清楚7、后台处理提供商品统计、分析能力,帮助决策8、商品显示顺序可自己设定,如按价格倒序、升序,按购买量升序、倒序等等9、即时显示卡号或密码,零等候时间。

下载

 5) 使用caching

  在Web API方法中使用output caching意义深远.举例来说,如果大量用户访问同一个一天只改变一次的响应(response)内容。

  如果你想实现手动缓存,例如把用户口令缓存到内存,请参看我的博文 Simple way to implement caching in ASP.NET Web API.

 6) 尽可能地使用典型的 ADO.NET

  手动编写的ADO.NET仍然是从数据库中取值的最快捷的方式。如果Web API的性能对你来说真的很重要,那么就不要使用ORMs.

  你可以看到最流行的ORM之间的性能比较.

2097.jpg

Dapper 和hand-written fetch code 很快,果不其然,所有的ORM都比这三种慢.

  带有resultset缓存的LLBLGen 很快,但它要重新遍历一遍resultset并重新再内存中实例化对象。

 7)在 Web API 中实现异步方法

  使用异步的 Web API 服务大幅增加 Web API 对于Http 请求的处理数量。

  实现是简单的,只需使用 async  的关键字和 将你方法的返回值类型改为 Task 即可。

[HttpGet] 
public async Task OperationAsync() 
{  
    await Task.Delay(2000); 
}

 8) 返回多个结果集和集合的组合

  减少传输的次数不仅多数据库有好处,对于 Web API同样 ,你才有可能使用结果集的功能。

  也就是说你可以从DataReader去提取多个结果集 参见以下演示代码:

// read the first resultset
var reader = command.ExecuteReader();
   
// read the data from that resultset
while (reader.Read())
{
    suppliers.Add(PopulateSupplierFromIDataReader( reader ));
}
   
// read the next resultset
reader.NextResult();
   
// read the data from that second resultset
while (reader.Read())
{
    products.Add(PopulateProductFromIDataReader( reader ));
}

你可以在一个 Web API 的一次响应中返回多个对象,试着将你的返回的多个对象进行组合后返回 如下:

public class AggregateResult
{
     public long MaxId { get; set; }
     public List Folders{ get; set; }
     public List  Users{ get; set; }
}

这种方式将减少对你的WEB API的HTTP请求。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

10

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

29

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

13

2026.01.22

PHP特殊符号教程合集
PHP特殊符号教程合集

本专题整合了PHP特殊符号相关处理方法,阅读专题下面的文章了解更多详细内容。

11

2026.01.22

PHP探针相关教程合集
PHP探针相关教程合集

本专题整合了PHP探针相关教程,阅读专题下面的文章了解更多详细内容。

8

2026.01.22

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

55

2026.01.22

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

9

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ASP.NET参考手册
ASP.NET参考手册

共0课时 | 0人学习

传播智客ASP.NET中级系列视频教程
传播智客ASP.NET中级系列视频教程

共33课时 | 6.4万人学习

传播智客ASP.NET高级系列视频教程
传播智客ASP.NET高级系列视频教程

共34课时 | 6.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号