提高ASP。净Web API性能的技术有哪些

  介绍

这篇文章主要介绍”提高ASP。净Web API性能的技术有哪些”,在日常操作中,相信很多人在提高ASP。净Web API性能的技术有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“提高ASP。净Web API性能的技术有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

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

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

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

提高ASP。净Web API性能的技术有哪些

theburningmonk

更新:似乎接缝,StackOverflow使用了他们号称迄今为止最快的JSON序列化工具吉尔。一测试数据可参见他们的GitHub页面吉尔序列化器。

<强> 2)从DataReader中手动串行化JSON

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

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

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

 var  response =, Request.CreateResponse (HttpStatusCode.OK);,
  时间=response.Content  new  StringContent (jsonResult, Encoding.UTF8,,“应用程序/json"),,
  return 响应;

你可以在里克特拉# 39;s博客查看更多方法

<强> 3)尽可能使用其它协议格式(协议缓冲区,消息包)

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

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

<强> 4)实现压缩

在你的ASP。净Web API中使用GZIP或缩小。

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

这是一个非常有必要使用的功能,你可以查看更多关于压缩的文章在我的博客ASP。净Web API GZip压缩ActionFilter 8行代码。

<强> 5)使用缓存

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

如果你想实现手动缓存,例如把用户口令缓存到内存,请参看我的博文简单的ASP实现缓存的方法。净Web API。

<强> 6)尽可能地使用典型的ADO。净

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

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

提高ASP。净Web API性能的技术有哪些

衣冠楚楚的和手写获取代码很快,果不其然,所有的ORM都比这三种慢。

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

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

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

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

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

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

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

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

//, read 从而first  resultset    var  reader =, command.ExecuteReader (),,   ,,//,read 从而,data 得到that  resultset    while  (reader.Read ()),   {,   suppliers.Add才能(PopulateSupplierFromIDataReader (, reader )),,   },   ,,//,read 从而,next  resultset    reader.NextResult (),,   ,,//,read 从而,data 得到that  second  resultset    while  (reader.Read ()),   {,   products.Add才能(PopulateProductFromIDataReader (, reader )),,   }

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

提高ASP。净Web API性能的技术有哪些