ASP.NET MVC 的小基准测试。查看页面代码:
public string Bechmark(Func<string> url)
{
var s = new Stopwatch();
var n = 1000;
s.Reset();
s.Start();
for (int i = 0; i < n; i++)
{
var u = url();
}
s.Stop();
return s.ElapsedMilliseconds + " ms, " + ((s.ElapsedMilliseconds) / (float)n) + " ms per link<br/>";
}
查看代码:
<%= Bechmark(() => Url.Action("Login", "Account")) %>
<%= Bechmark(() => Url.Action("Login", "Account", new {username="bla", password="bla2", returnurl="blabla32", rememberme=false} )) %>
<%= Bechmark(() => Html.BuildUrlFromExpression<AccountController>(a=>a.ChangePassword("bla", "bla", "ya")) ) %>
在具有 ASP.NET MVC Beta 的默认新项目模板上的典型 Core2 笔记本上运行此程序会产生以下结果:
38 毫秒,每个链接 0,038 毫秒
120 毫秒,每个链接 0.12 毫秒
54 毫秒,每个链接 0,054 毫秒
在一个包含大约 10 个控制器的生产项目上运行相同的基准测试,总共有大约 100 个方法和 30 个路由表条目,基于表达式的方法的性能大大降低:
31 毫秒,每个链接 0,031 毫秒
112 毫秒,每个链接 0,112 毫秒
450 毫秒,每个链接 0.45 毫秒
我们经常使用这种方法(可维护性)并进行一些性能基准测试,这大大降低了网站的性能 - 页面很快包含大约 30 个或更多这样的链接,这意味着单个页面上的额外开销为 10 毫秒。即使是每个 URL 的 0.112 毫秒,也大约是 4 毫秒的纯 CPU 开销。
应该注意的是,MVC Preview 3 和 Beta(昨天发布)之间的所有三个 URL 生成调用的性能都提高了 5 倍。
Stack Overflow 应该由相同的框架提供支持,你们是如何解决这个扩展问题的?首页(大量链接)和预渲染控件的自由缓存?
ASP.NET MVC 中的其他生产网站是否存在性能问题或一些好的提示?