API接口性能优化总结

在调用WCF ,API , Core2.1或者其他接口时,总会遇到性能瓶颈,在订单量不断的新增的情况下,产生高并发。

出现服务器CPU 100%  或者是内存100%    其根本原因 可能是  API接口调用频率太高。无法释放内存产生的。

在这种情况下,如何找到并发的原因:

一:检查sql数据查询或者是非查询功能的性能。查看sql语句的执行时间是否超时,优化sql语句

二:查看接口中是否有调用其他服务的地方,例如:调用了其他或Api 。检查具体执行时间。可以在调用的接口中 添加执行时间查看,并且在优化代码里面也添加执行时间,对比时间差。因为网络传输占用的时间比很大。

三:检查代码业务逻辑,是否可以做出优化,查用异步方法执行,用  async/await方式。

例如: public async Task<JsonResult> check([FromQuery]MemberInfoRequst request)
        {

               h = await bll.CheckUserAsync(request);     

               return await Task.Factory.StartNew(() =>
               {
                    return Json(result);
               });

        }

四:在一些基础信息或者是数据不变的数据中,添加入redis或者是memcached缓存。

例如redis缓存   

 private  RedisHelper cache = new RedisHelper();

           string key = "test";
            string eff = cache.StringGetAsync<string>(key).Result;
            if (eff == null || string.IsNullOrEmpty(eff))
            {

               // 如果缓存里面没有数据,就去数据库或者wcf接口中查询。把查询到的数据保持到缓存中。

               key=Client.GetDiscountByUserAsync(cardkind.ToString(), brandcode).Result;

                cache.StringSetAsync(key, zk, TimeSpan.FromMinutes(60)).Wait();
            }
            else
            {
                zk = Convert.ToDouble(eff);
            }

五:优化返回数据,是否有必要全部返回,是否可以做到异步加载,例如:某一数据可以在该方法返回后再通过其他方法获取。那么可以把该数据拆分出去。

六:数据库表的优化,在一些查询字段中必须添加索引,这个对sql语句查询性能很大。

七:语句的业务逻辑优化,在一些for 或者foreach 里面不能再去查询数据库,做到 尽量减少数据库交互,尽量获取的都是有效数据,不必要的字段不需要返回,所以select语句不能用* 查询。尽量减少服务器之间的交互。

八:如果以上操作还不能解决问题,可以考虑 是否是cpu或者是内存太小的问题。例如:cup:8核 内存:16G   是否 可以升级 

九:是否可以做负责均衡,添加多台服务器,用F5实现负载或者是用网关实现负载, 

猜你喜欢

转载自blog.csdn.net/xulong5000/article/details/90236152