当前位置: 首页 > 科技观察

提高ASP.NETWebAPI性能的8种方法

时间:2023-03-19 18:44:45 科技观察

ASP.NETWebAPI是一项了不起的技术。编写WebAPI非常容易,以至于许多开发人员不会花时间进行应用程序结构设计以获得良好的性能。在本文中,我将介绍8种提高ASP.NETWebAPI性能的技术。1)使用最快的JSON序列化工具JSON序列化对整个ASP.NETWebAPI的性能有着至关重要的影响。自从我在一个项目中从JSON.NET序列化程序切换到ServiceStack.Text以来已经一年半了。我测过WebAPI的性能提升了20%左右。我强烈建议您试试这个序列化工具。以下是一些最近流行的序列化工具性能的比较数据。来源:theburningmonk更新:似乎StackOverflow使用Jil,他们声称这是迄今为止最快的JSON序列化工具。可以在他们的GitHub页面Jilserializer上找到测试数据。2)从DataReader手动序列化JSON我在我的项目中使用了这种方法并获得了性能优势。你可以从DataReader中手动创建JSON字符串,避免不必要的对象创建,这样你就不必从DataReader中取值并写入对象,然后再从这些对象中取值并使用JSONSerializer产生JSON。使用StringBuilder生成JSON,并在最后返回StringContent作为WebAPI中响应的内容。varresponse=R??equest.CreateResponse(HttpStatusCode.OK);response.Content=newStringContent(jsonResult,Encoding.UTF8,"application/json");返回响应;更多方法可以查看RickStrahl的博客3)尽量使用其他协议格式(protocolbuffer,messagepack)如果可以在项目中使用其他的消息格式,比如ProtocolBuffers或者MessagePack而不是使用JSON协议格式.您将获得巨大的性能优势,不仅因为ProtocolBuffers的序列化速度非常快,而且格式化结果的速度也比JSON快。4)在您的ASP.NETWebAPI中使用GZIP或Deflate实现压缩。压缩是减少响应数据包大小和速度的一种简单有效的方法。这是一个非常必要的功能,你可以在我的博客ASP.NETWebAPIGZipcompressionActionFilterwith8linescode中查看更多关于压缩的文章。5)Usecache在WebAPI方法Profound中使用输出缓存。例如,如果大量用户访问相同的每天只更改一次的响应内容。如果你想实现手动缓存,比如在内存中缓存用户密码,请参考我的博文ASP.NETWebAPI实现缓存的简单方法。6)尽可能使用典型的ADO.NET手册编写。ADO.NET仍然是从数据库中获取值的最快方法。如果WebAPI性能对您来说真的很重要,那么请不要使用ORM。您可以看到最佳ORM之间的性能比较。Dapper和手写的fetchcode都很快,不出所料,所有的ORM都比较慢。带有结果集缓存的LLBLGen速度很快,但它必须重新遍历结果集并重新实例化内存中的对象。7)在WebAPI中实现异步方法使用异步WebAPI服务可以大大增加WebAPI处理的Http请求的数量。实现很简单,只需使用async关键字并将方法的返回类型更改为Task。[HttpGet]publicasyncTaskOperationAsync(){awaitTask.Delay(2000);}8)返回多个结果集和集合的组合,减少传输次数,不仅对多数据库有好处,对于WebAPI,可以使用结果集的功能。也就是说,您可以从DataReader中提取多个结果集。请参见以下演示代码://readthefirstresultsetvarreader=command.ExecuteReader();//从那个结果集中读取数据while(reader.Read()){suppliers.Add(PopulateSupplierFromIDataReader(reader));}//readthenextresultsetreader.NextResult();//从第二个结果集中读取数据while(reader.Read()){products.Add(PopulateProductFromIDataReader(reader));你可以在一个WebAPI的一个响应中返回多个对象,尝试然后组合你返回的多个对象并返回它们如下:>Users{get;set;}}这种方式将减少对您的WEBAPI的HTTP请求。感谢您阅读本文。英文原文:8waystoimproveASP.NETWebAPIperformance翻译链接:http://www.oschina.net/translate/8-ways-improve-asp-net-web-api-performance