天天看点

MvcApi VS MinApi 性能对比(Text)

早上分享一篇,比较实际的文章,大家最关心的性能问题。

但是因为早上使用的是json输出,为了避免掺杂水分,下午特意写了新的,并完善了他。

在此之前,一直没有提供性能对比,参考图,今天它就来了,稍后附上测试代码。

废话不多说直接上图:

性能对比图

1000次

MvcApi VS MinApi 性能对比(Text)

10000次

MvcApi VS MinApi 性能对比(Text)

100000次

MvcApi VS MinApi 性能对比(Text)

以上注明,均在 Release 模式下测试。

设备信息:

CPU:Intel(R) Core(TM) i7-9700F CPU @ 3.00GHz
内存:16.0 GB	2666 MHz
           

测试代码

MvcApi

[ApiController]
    [Route("Api1")]
    public class HomeController : ControllerBase
    {
        public IActionResult GetApi()
        {
            return Ok("{\"msg\":\"MvcApi\"}");
        }
    }
           

MinApi

public class Home : MinApi
    {
        public IApiOut GetApi() => ApiOut.Write("{\"msg\":\"MinApi\"}");
    }
           

测试代码

class Program
    {
static void Main(string[] args)
        {
            Console.WriteLine("欢迎使用 Core HTTP 性能测试:");

            A:
            Console.WriteLine("请输入测试数量:");

            HttpClient httpClient = new HttpClient() { BaseAddress = new Uri("http://127.0.0.1:500/") };
            httpClient.GetStringAsync("").Wait();

            int c = int.Parse(Console.ReadLine());

            DateTime dateTime = DateTime.Now;
            for (int i = 0; i < c; i++)
            {
                httpClient.GetStringAsync("api1").Wait();
            }

            double milliseconds1 = (DateTime.Now - dateTime).TotalMilliseconds;

            Console.WriteLine($"MvcApi: 累计消耗:{milliseconds1} 毫秒,平均:{milliseconds1/c} ms/次 。");

            DateTime dateTime1 = DateTime.Now;
            for (int i = 0; i < c; i++)
            {
                httpClient.GetStringAsync("api/Home/GetApi").Wait();
            }

            double milliseconds2 = (DateTime.Now - dateTime1).TotalMilliseconds;

            Console.WriteLine($"MinApi: 累计消耗:{milliseconds2} 毫秒,平均:{milliseconds2 / c} ms/次 。");

            Console.WriteLine($"MinApi 优于 MvcApi:{milliseconds1 - milliseconds2} 毫秒。");

            Console.WriteLine("是否继续测试:(1表示继续)");
            int c1 = int.Parse(Console.ReadLine());
            if (c1 == 1)
            {
                goto A;
            }
            
            httpClient.Dispose();
            Console.ReadKey();
        }
    }
           

总结

作者还是那句话,喜欢用啥就用啥,作者也只是为了满足部分码农的好奇心,对其提供系统化的测试案例,还是要
根据需求进行,相应开发哦,感觉大家的支持,欢迎转载,如有疑问欢迎在下方评论区留言。