目录
本文的目的是比较 ASP.NET WebForms 和 ASP.NET MVC 之间的性能。从 Webforms 转向 MVC 的主要原因是性能、性能和性能。
供参考:如果您是 MVC 教程的新手,可以从文章末尾的视频开始。
为了进行此测试,我们创建了两个项目,一个使用 ASP.NET MVC,另一个使用 ASP.NET Webforms。我们保持测试绝对简单。这两个项目都显示 20 个文本框,并且加载了一个包含 1000 条记录的网格。
以下是与网格服务器控件绑定的 ASP.NET Webform 后端代码。
protected void Page_Load(object sender, EventArgs e)
{
for(int i=0;i<1000;i++)
{
obj.Add(DateTime.Now.ToString());
}
GridView1.DataSource = obj;
GridView1.DataBind();
}
}
在 ASPX UI 上,我们有 20 个文本框,它们使用 ASP.NET Webforms 的服务器控件。
<asp:TextBox ID="TextBox1" runat="server" BackColor="#FF66FF"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server" BackColor="#FF66FF">
<asp:TextBox ID="TextBox3" runat="server" BackColor="#FF66FF">
…….
<asp:TextBox ID="TextBox6" runat="server" BackColor="#FF66FF">
在 ASP.NET MVC 项目中,我们也具有类似的逻辑。我们使用 HTML 控件创建了 20 个文本框,并使用一个简单的循环创建了一个 HTML 表格。
<input id="Text1" type="text" style="background-color:#FF66FF" />
<input id="Text1" type="text" style="background-color:#FF66FF" />
<input id="Text1" type="text" style="background-color:#FF66FF" />
@{
List<string> obj = new List<string>();
for (int i = 0; i < 1000; i++)
{
obj.Add(DateTime.Now.ToString());
}
}
@{
foreach (string str in obj)
{
}
}
<table>
Item@str
在此测试中,我们没有使用 JSON、Jquery、Ajax,因为我们只想测试这些平台的性能,而不是它们与 HTML 5、Ajax 等其他技术结合时的性能。
测试使用 VSTS 和 Telerik 负载测试软件,按照以下规格进行:
- 用户负载 25 个用户。
- 测试运行时间为 10 分钟。
- 机器配置 DELL 8 GB 内存,酷睿 i3
- 项目托管在 IIS 8 中。
- 项目是使用 MVC 5 创建的。
- 假设使用局域网连接。因此,此测试暂时不考虑网络延迟。
- 测试中选择的浏览器是 Chrome 和 Internet Explorer。
- 测试期间进行了多次读数以平均未知事件。共进行了 7 次读数,所有读数都作为读数 1、2 等发布在本文中。
性能通过两个标准衡量:平均页面响应时间和响应内容字节数。
平均页面响应时间:当执行负载测试时,25 个用户获取页面输出的平均时间。
响应内容长度:每次请求传输的平均总字节数。选择此标准是因为我们怀疑服务器控件生成的 HTML 量比我们编写自定义 HTML 时要多。
响应时间

MVC 的响应时间比 Webform 好得多。我们发现 ASP.NET MVC 的响应时间是 Webforms 的两倍。

原因显而易见。当请求发送到 Webforms 时,会执行复杂的 ASP.NET 页面生命周期。这个后端代码无非是一种转换逻辑,它将 ASP.NET 服务器控件转换为 HTML。
在 ASP.NET MVC 中,没有后端代码,也不需要这种转换,因为控件本身就是 HTML 格式。
内容长度
对于相同类型的逻辑,Webform 生成的 HTML 内容长度是 MVC 的两倍。

当我们查看源代码时,我们发现 Webform 生成了大量的视图状态数据,而 MVC 中没有。这意味着当我们浏览 ASP.NET Webform 网站时,与 ASP.NET MVC 网站相比,将消耗更多的带宽。

如果您查看负载测试的结论,我们需要一个没有代码后端和服务器控件的解决方案。因此,当您创建 ASP.NET MVC 项目时,您将不会找到没有代码后端和服务器控件的项目。
以下是 MVC 视图的快照,您可以看到有 * .CSHTML * ,但没有 * CSHTML.CS * 。

如果您进入一个 MVC 视图并单击工具箱,它只有 HTML 选项卡,所有服务器控件都已完全消失。

您还可以阅读这篇详细的文章,其中讨论了我们 在 ASP.NET MVC 中从 Webforms 错过的东西。
以下是 Webform 和 MVC 的所有七个读数。这些读数将为您提供更多关于这些技术之间性能因素的见解。
负载测试摘要
测试运行信息
负载测试名称 | LoadTest1 |
描述 | |
开始时间 | 2015/1/11 上午 9:49:56 |
结束时间 | 2015/1/11 上午 9:59:56 |
预热时长 | 00:00:00 |
持续时间 | 00:10:00 |
控制器 (Controller) | 本地运行 |
代理数量 | 1 |
使用的运行设置 | 运行设置1 |
总体结果
最大用户负载 | 25 |
测试/秒 | 19.2 |
测试失败 | 0 |
平均测试时间(秒) | 1.26 |
事务/秒 | 0 |
平均事务时间(秒) | 0 |
页面/秒 | 19.2 |
平均页面时间(秒) | 1.25 |
请求/秒 | 19.2 |
请求失败 | 0 |
请求缓存百分比 | 0 |
平均响应时间(秒) | 1.25 |
平均内容长度(字节) | 96,425 |
关键统计:最慢的 5 个页面
关键统计:最慢的 5 个测试
名称 | 95% 测试时间(秒) |
WebTest1 | 2.32 |
测试结果
名称 | 场景 | 总测试次数 | 失败测试(占总数的百分比) | 平均测试时间(秒) |
WebTest1 | 场景1 | 11,510 | 0 (0) | 1.26 |
页面结果
URL(更多详情链接) | 场景 | 测试 | 平均页面时间(秒) | Count |
http://192.168.15.141:98/WebForm/WebForm1.aspx | 场景1 | WebTest1 | 1.25 | 11,510 |
事务结果
名称 | 场景 | 测试 | 响应时间(秒) | 已用时间(秒) | Count |
被测系统资源
机器名称 | 处理器时间百分比 | 测试完成时可用内存(MB) |
控制器和代理资源
机器名称 | 处理器时间百分比 | 测试完成时可用内存(MB) |
用户电脑 | 43.8 | 855 |
错误
负载测试摘要
测试运行信息
负载测试名称 | LoadTest2 |
描述 | |
开始时间 | 2015/1/11 下午 12:13:49 |
结束时间 | 2015/1/11 下午 12:23:49 |
预热时长 | 00:00:00 |
持续时间 | 00:10:00 |
控制器 (Controller) | 本地运行 |
代理数量 | 1 |
使用的运行设置 | 运行设置1 |
总体结果
最大用户负载 | 25 |
测试/秒 | 46.0 |
测试失败 | 0 |
平均测试时间(秒) | 0.49 |
事务/秒 | 0 |
平均事务时间(秒) | 0 |
页面/秒 | 46.0 |
平均页面时间(秒) | 0.48 |
请求/秒 | 46.0 |
请求失败 | 0 |
请求缓存百分比 | 0 |
平均响应时间(秒) | 0.48 |
平均内容长度(字节) | 58,923 |
关键统计:最慢的 5 个页面
关键统计:最慢的 5 个测试
名称 | 95% 测试时间(秒) |
WebTest2 | 1.14 |
测试结果
名称 | 场景 | 总测试次数 | 失败测试(占总数的百分比) | 平均测试时间(秒) |
WebTest2 | 场景1 | 27,619 | 0 (0) | 0.49 |
页面结果
URL(更多详情链接) | 场景 | 测试 | 平均页面时间(秒) | Count |
http://192.168.15.141:98/LoadTest/SomePage | 场景1 | WebTest2 | 0.48 | 27,619 |
事务结果
名称 | 场景 | 测试 | 响应时间(秒) | 已用时间(秒) | Count |
被测系统资源
机器名称 | 处理器时间百分比 | 测试完成时可用内存(MB) |
控制器和代理资源
机器名称 | 处理器时间百分比 | 测试完成时可用内存(MB) |
用户电脑 | 63.0 | 1,012 |
错误
负载测试摘要
测试运行信息
负载测试名称 | LoadTest1 |
描述 | |
开始时间 | 2015/1/11 上午 10:25:53 |
结束时间 | 2015/1/11 上午 10:35:53 |
预热时长 | 00:00:00 |
持续时间 | 00:10:00 |
控制器 (Controller) | 本地运行 |
代理数量 | 1 |
使用的运行设置 | 运行设置1 |
总体结果
最大用户负载 | 25 |
测试/秒 | 11.1 |
测试失败 | 0 |
平均测试时间(秒) | 2.22 |
事务/秒 | 0 |
平均事务时间(秒) | 0 |
页面/秒 | 11.1 |
平均页面时间(秒) | 2.20 |
请求/秒 | 11.1 |
请求失败 | 0 |
请求缓存百分比 | 0 |
平均响应时间(秒) | 2.20 |
平均内容长度(字节) | 100,276 |
关键统计:最慢的 5 个页面
关键统计:最慢的 5 个测试
名称 | 95% 测试时间(秒) |
WebTest1 | 5.80 |
测试结果
名称 | 场景 | 总测试次数 | 失败测试(占总数的百分比) | 平均测试时间(秒) |
WebTest1 | 场景1 | 6,640 | 0 (0) | 2.22 |
页面结果
URL(更多详情链接) | 场景 | 测试 | 平均页面时间(秒) | Count |
http://192.168.15.141:98/WebForm/WebForm1.aspx | 场景1 | WebTest1 | 2.20 | 6,640 |
事务结果
名称 | 场景 | 测试 | 响应时间(秒) | 已用时间(秒) | Count |
被测系统资源
机器名称 | 处理器时间百分比 | 测试完成时可用内存(MB) |
控制器和代理资源
机器名称 | 处理器时间百分比 | 测试完成时可用内存(MB) |
用户电脑 | 61.2 | 841 |
错误
负载测试摘要
测试运行信息
负载测试名称 | LoadTest2 |
描述 | |
开始时间 | 2015/1/11 下午 1:03:06 |
结束时间 | 2015/1/11 下午 1:13:06 |
预热时长 | 00:00:00 |
持续时间 | 00:10:00 |
控制器 (Controller) | 本地运行 |
代理数量 | 1 |
使用的运行设置 | 运行设置1 |
总体结果
最大用户负载 | 25 |
测试/秒 | 52.2 |
测试失败 | 0 |
平均测试时间(秒) | 0.39 |
事务/秒 | 0 |
平均事务时间(秒) | 0 |
页面/秒 | 52.2 |
平均页面时间(秒) | 0.39 |
请求/秒 | 52.2 |
请求失败 | 0 |
请求缓存百分比 | 0 |
平均响应时间(秒) | 0.39 |
平均内容长度(字节) | 46,281 |
关键统计:最慢的 5 个页面
关键统计:最慢的 5 个测试
名称 | 95% 测试时间(秒) |
WebTest2 | 1.03 |
测试结果
名称 | 场景 | 总测试次数 | 失败测试(占总数的百分比) | 平均测试时间(秒) |
WebTest2 | 场景1 | 31,330 | 0 (0) | 0.39 |
页面结果
URL(更多详情链接) | 场景 | 测试 | 平均页面时间(秒) | Count |
http://192.168.15.141:98/LoadTest/SomePage | 场景1 | WebTest2 | 0.39 | 31,330 |
事务结果
名称 | 场景 | 测试 | 响应时间(秒) | 已用时间(秒) | Count |
被测系统资源
机器名称 | 处理器时间百分比 | 测试完成时可用内存(MB) |
控制器和代理资源
机器名称 | 处理器时间百分比 | 测试完成时可用内存(MB) |
用户电脑 | 65.6 | 855 |
错误
负载测试摘要
测试运行信息
负载测试名称 | LoadTest1 |
描述 | |
开始时间 | 2015/1/11 上午 11:04:01 |
结束时间 | 2015/1/11 上午 11:14:01 |
预热时长 | 00:00:00 |
持续时间 | 00:10:00 |
控制器 (Controller) | 本地运行 |
代理数量 | 1 |
使用的运行设置 | 运行设置1 |
总体结果
最大用户负载 | 25 |
测试/秒 | 9.66 |
测试失败 | 0 |
平均测试时间(秒) | 2.54 |
事务/秒 | 0 |
平均事务时间(秒) | 0 |
页面/秒 | 9.66 |
平均页面时间(秒) | 2.52 |
请求/秒 | 9.66 |
请求失败 | 0 |
请求缓存百分比 | 0 |
平均响应时间(秒) | 2.52 |
平均内容长度(字节) | 99,769 |
关键统计:最慢的 5 个页面
关键统计:最慢的 5 个测试
名称 | 95% 测试时间(秒) |
WebTest1 | 9.77 |
测试结果
名称 | 场景 | 总测试次数 | 失败测试(占总数的百分比) | 平均测试时间(秒) |
WebTest1 | 场景1 | 5,795 | 0 (0) | 2.54 |
页面结果
URL(更多详情链接) | 场景 | 测试 | 平均页面时间(秒) | Count |
http://192.168.15.141:98/WebForm/WebForm1.aspx | 场景1 | WebTest1 | 2.52 | 5,795 |
事务结果
名称 | 场景 | 测试 | 响应时间(秒) | 已用时间(秒) | Count |
被测系统资源
机器名称 | 处理器时间百分比 | 测试完成时可用内存(MB) |
控制器和代理资源
机器名称 | 处理器时间百分比 | 测试完成时可用内存(MB) |
用户电脑 | 61.0 | 875 |
错误
负载测试摘要
测试运行信息
负载测试名称 | LoadTest2 |
描述 | |
开始时间 | 2015/1/11 下午 1:28:54 |
结束时间 | 2015/1/11 下午 1:38:54 |
预热时长 | 00:00:00 |
持续时间 | 00:10:00 |
控制器 (Controller) | 本地运行 |
代理数量 | 1 |
使用的运行设置 | 运行设置1 |
总体结果
最大用户负载 | 25 |
测试/秒 | 16.1 |
测试失败 | 0 |
平均测试时间(秒) | 1.50 |
事务/秒 | 0 |
平均事务时间(秒) | 0 |
页面/秒 | 16.1 |
平均页面时间(秒) | 1.49 |
请求/秒 | 16.1 |
请求失败 | 0 |
请求缓存百分比 | 0 |
平均响应时间(秒) | 1.49 |
平均内容长度(字节) | 57,923 |
关键统计:最慢的 5 个页面
关键统计:最慢的 5 个测试
名称 | 95% 测试时间(秒) |
WebTest2 | 2.94 |
测试结果
名称 | 场景 | 总测试次数 | 失败测试(占总数的百分比) | 平均测试时间(秒) |
WebTest2 | 场景1 | 9,647 | 0 (0) | 1.50 |
页面结果
URL(更多详情链接) | 场景 | 测试 | 平均页面时间(秒) | Count |
http://192.168.15.141:98/LoadTest/SomePage | 场景1 | WebTest2 | 1.49 | 9,647 |
事务结果
名称 | 场景 | 测试 | 响应时间(秒) | 已用时间(秒) | Count |
被测系统资源
机器名称 | 处理器时间百分比 | 测试完成时可用内存(MB) |
控制器和代理资源
机器名称 | 处理器时间百分比 | 测试完成时可用内存(MB) |
用户电脑 | 31.7 | 862 |
错误
负载测试摘要
测试运行信息
负载测试名称 | LoadTest1 |
描述 | |
开始时间 | 2015/1/11 上午 11:28:39 |
结束时间 | 2015/1/11 上午 11:38:39 |
预热时长 | 00:00:00 |
持续时间 | 00:10:00 |
控制器 (Controller) | 本地运行 |
代理数量 | 1 |
使用的运行设置 | 运行设置1 |
总体结果
最大用户负载 | 25 |
测试/秒 | 11.8 |
测试失败 | 7 |
平均测试时间(秒) | 2.08 |
事务/秒 | 0 |
平均事务时间(秒) | 0 |
页面/秒 | 11.8 |
平均页面时间(秒) | 2.06 |
请求/秒 | 11.8 |
请求失败 | 7 |
请求缓存百分比 | 0 |
平均响应时间(秒) | 2.06 |
平均内容长度(字节) | 100,205 |
关键统计:最慢的 5 个页面
关键统计:最慢的 5 个测试
名称 | 95% 测试时间(秒) |
WebTest1 | 5.60 |
测试结果
名称 | 场景 | 总测试次数 | 失败测试(占总数的百分比) | 平均测试时间(秒) |
WebTest1 | 场景1 | 7,073 | 7 (0.099) | 2.08 |
页面结果
URL(更多详情链接) | 场景 | 测试 | 平均页面时间(秒) | Count |
http://192.168.15.141:98/WebForm/WebForm1.aspx | 场景1 | WebTest1 | 2.06 | 7,073 |
事务结果
名称 | 场景 | 测试 | 响应时间(秒) | 已用时间(秒) | Count |
被测系统资源
机器名称 | 处理器时间百分比 | 测试完成时可用内存(MB) |
用户电脑 | 75.8 | 922 |
错误
类型 | 子类型 | Count | 最后消息 |
HTTP 错误 | 500 - 内部服务器错误 | 7 | 500 - 内部服务器错误 |
负载测试摘要
测试运行信息
负载测试名称 | LoadTest2 |
描述 | |
开始时间 | 2015/1/11 下午 1:17:12 |
结束时间 | 2015/1/11 下午 1:27:12 |
预热时长 | 00:00:00 |
持续时间 | 00:10:00 |
控制器 (Controller) | 本地运行 |
代理数量 | 1 |
使用的运行设置 | 运行设置1 |
总体结果
最大用户负载 | 25 |
测试/秒 | 30.8 |
测试失败 | 0 |
平均测试时间(秒) | 0.65 |
事务/秒 | 0 |
平均事务时间(秒) | 0 |
页面/秒 | 30.8 |
平均页面时间(秒) | 0.64 |
请求/秒 | 30.8 |
请求失败 | 0 |
请求缓存百分比 | 0 |
平均响应时间(秒) | 0.64 |
平均内容长度(字节) | 50,657 |
关键统计:最慢的 5 个页面
关键统计:最慢的 5 个测试
名称 | 95% 测试时间(秒) |
WebTest2 | 1.72 |
测试结果
名称 | 场景 | 总测试次数 | 失败测试(占总数的百分比) | 平均测试时间(秒) |
WebTest2 | 场景1 | 18,483 | 0 (0) | 0.65 |
页面结果
URL(更多详情链接) | 场景 | 测试 | 平均页面时间(秒) | Count |
http://192.168.15.141:98/LoadTest/SomePage | 场景1 | WebTest2 | 0.64 | 18,484 |
事务结果
名称 | 场景 | 测试 | 响应时间(秒) | 已用时间(秒) | Count |
被测系统资源
机器名称 | 处理器时间百分比 | 测试完成时可用内存(MB) |
用户电脑 | 43.3 | 854 |
错误
负载测试摘要
测试运行信息
负载测试名称 | LoadTest1 |
描述 | |
开始时间 | 2015/1/11 下午 1:40:52 |
结束时间 | 2015/1/11 下午 1:50:52 |
预热时长 | 00:00:00 |
持续时间 | 00:10:00 |
控制器 (Controller) | 本地运行 |
代理数量 | 1 |
使用的运行设置 | 运行设置1 |
总体结果
最大用户负载 | 25 |
测试/秒 | 18.8 |
测试失败 | 0 |
平均测试时间(秒) | 1.32 |
事务/秒 | 0 |
平均事务时间(秒) | 0 |
页面/秒 | 18.8 |
平均页面时间(秒) | 1.31 |
请求/秒 | 18.8 |
请求失败 | 0 |
请求缓存百分比 | 0 |
平均响应时间(秒) | 1.31 |
平均内容长度(字节) | 100,607 |
关键统计:最慢的 5 个页面
关键统计:最慢的 5 个测试
名称 | 95% 测试时间(秒) |
WebTest1 | 2.56 |
测试结果
名称 | 场景 | 总测试次数 | 失败测试(占总数的百分比) | 平均测试时间(秒) |
WebTest1 | 场景1 | 11,261 | 0 (0) | 1.32 |
页面结果
URL(更多详情链接) | 场景 | 测试 | 平均页面时间(秒) | Count |
http://192.168.15.141:98/WebForm/WebForm1.aspx | 场景1 | WebTest1 | 1.31 | 11,261 |
事务结果
名称 | 场景 | 测试 | 响应时间(秒) | 已用时间(秒) | Count |
6 被测系统资源
机器名称 | 处理器时间百分比 | 测试完成时可用内存(MB) |
用户电脑 | 60.8 | 891 |
6 个错误
负载测试摘要
测试运行信息
负载测试名称 | LoadTest2 |
描述 | |
开始时间 | 2015/1/11 下午 2:30:38 |
结束时间 | 2015/1/11 下午 2:40:38 |
预热时长 | 00:00:00 |
持续时间 | 00:10:00 |
控制器 (Controller) | 本地运行 |
代理数量 | 1 |
使用的运行设置 | 运行设置1 |
总体结果
最大用户负载 | 25 |
测试/秒 | 34.3 |
测试失败 | 0 |
平均测试时间(秒) | 0.68 |
事务/秒 | 0 |
平均事务时间(秒) | 0 |
页面/秒 | 34.3 |
平均页面时间(秒) | 0.68 |
请求/秒 | 34.3 |
请求失败 | 0 |
请求缓存百分比 | 0 |
平均响应时间(秒) | 0.68 |
平均内容长度(字节) | 57,923 |
关键统计:最慢的 5 个页面
关键统计:最慢的 5 个测试
名称 | 95% 测试时间(秒) |
WebTest2 | 1.61 |
6 个测试结果
名称 | 场景 | 总测试次数 | 失败测试(占总数的百分比) | 平均测试时间(秒) |
WebTest2 | 场景1 | 20,603 | 0 (0) | 0.68 |
6 个页面结果
URL(更多详情链接) | 场景 | 测试 | 平均页面时间(秒) | Count |
http://192.168.15.141:98/LoadTest/SomePage | 场景1 | WebTest1 | 0.68 | 20,603 |
6 个事务结果
名称 | 场景 | 测试 | 响应时间(秒) | 已用时间(秒) | Count |
6 被测系统资源
机器名称 | 处理器时间百分比 | 测试完成时可用内存(MB) |
用户电脑 | 54.4 | 915 |
6 个错误
负载测试摘要
测试运行信息
负载测试名称 | LoadTest1 |
描述 | |
开始时间 | 2015/1/11 下午 2:15:21 |
结束时间 | 2015/1/11 下午 2:25:21 |
预热时长 | 00:00:00 |
持续时间 | 00:10:00 |
控制器 (Controller) | 本地运行 |
代理数量 | 1 |
使用的运行设置 | 运行设置1 |
总体结果
最大用户负载 | 25 |
测试/秒 | 10.7 |
测试失败 | 0 |
平均测试时间(秒) | 1.98 |
事务/秒 | 0 |
平均事务时间(秒) | 0 |
页面/秒 | 10.7 |
平均页面时间(秒) | 1.96 |
请求/秒 | 10.7 |
请求失败 | 0 |
请求缓存百分比 | 0 |
平均响应时间(秒) | 1.96 |
平均内容长度(字节) | 101,007 |
关键统计:最慢的 5 个页面
关键统计:最慢的 5 个测试
名称 | 95% 测试时间(秒) |
WebTest1 | 3.79 |
测试结果
名称 | 场景 | 总测试次数 | 失败测试(占总数的百分比) | 平均测试时间(秒) |
WebTest1 | 场景1 | 6,395 | 0 (0) | 1.98 |
页面结果
URL(更多详情链接) | 场景 | 测试 | 平均页面时间(秒) | Count |
http://192.168.15.141:98/WebForm/WebForm1.aspx | 场景1 | WebTest1 | 1.96 | 6,395 |
事务结果
名称 | 场景 | 测试 | 响应时间(秒) | 已用时间(秒) | Count |
被测系统资源
机器名称 | 处理器时间百分比 | 测试完成时可用内存(MB) |
控制器和代理资源
机器名称 | 处理器时间百分比 | 测试完成时可用内存(MB) |
用户电脑 | 60.4 | 188 |
错误
负载测试摘要
测试运行信息
负载测试名称 | LoadTest2 |
描述 | |
开始时间 | 2015/1/11 下午 2:41:57 |
结束时间 | 2015/1/11 下午 2:51:57 |
预热时长 | 00:00:00 |
持续时间 | 00:10:00 |
控制器 (Controller) | 本地运行 |
代理数量 | 1 |
使用的运行设置 | 运行设置1 |
总体结果
最大用户负载 | 25 |
测试/秒 | 20.4 |
测试失败 | 0 |
平均测试时间(秒) | 0.67 |
事务/秒 | 0 |
平均事务时间(秒) | 0 |
页面/秒 | 20.4 |
平均页面时间(秒) | 0.66 |
请求/秒 | 20.4 |
请求失败 | 4 |
请求缓存百分比 | 0 |
平均响应时间(秒) | 0.66 |
平均内容长度(字节) | 57,904 |
关键统计:最慢的 5 个页面
关键统计:最慢的 5 个测试
名称 | 95% 测试时间(秒) |
WebTest2 | 1.39 |
测试结果
名称 | 场景 | 总测试次数 | 失败测试(占总数的百分比) | 平均测试时间(秒) |
WebTest2 | 场景1 | 12,220 | 4 (0.033) | 0.67 |
6 个页面结果
URL(更多详情链接) | 场景 | 测试 | 平均页面时间(秒) | Count |
http://192.168.15.141:98/LoadTest/SomePage | 场景1 | WebTest2 | 0.66 | 12,220 |
6 个事务结果
名称 | 场景 | 测试 | 响应时间(秒) | 已用时间(秒) | Count |
6 被测系统资源
机器名称 | 处理器时间百分比 | 测试完成时可用内存(MB) |
6 个控制器和代理资源
机器名称 | 处理器时间百分比 | 测试完成时可用内存(MB) |
用户电脑 | 59.0 | 852 |
6 个错误
类型 | 子类型 | Count | 最后消息 |
异常 | SocketException | 4 | 现有连接被远程主机强制关闭 |
因此,如果您确信 ASP.NET MVC 是未来的发展方向,那么现在就开始学习 MVC 如何?以下是一个出色的 ASP.NET MVC 视频,它在 16 小时内完整教授 MVC。
许多开发人员会对上述测试提出质疑,声称
- 我们有禁用视图状态的选项
- 我们有使用 HTML 而不是服务器控件的选项
- 等等...
是的,我们完全同意 Webforms 可以进行调整以最优方式运行,并且它们可以与 ASP.NET MVC 具有几乎相同的性能。
但这项测试遵循了最常用的功能方法。一般来说,当 Webform 被使用 99% 的时间时,开发人员不会禁用视图状态,他们使用后端代码,他们左右使用服务器控件等等。
因为如果我们走那样的测试路线,那么 ASP.NET MVC 也有许多最佳实践,比如 jQuery、JSON 等,以提高性能。
所以这次测试是在 Webform 和 MVC 中最常用的功能的基础上进行的。这两种技术都从零开始,并使用它们在市场上最常用的功能进行比较。
如果你被带到一个酒吧,你可以选择喝葡萄酒或果汁。你很有可能会喝葡萄酒……诱惑,人性,无论你怎么称呼它。
但如果你被带到一家果汁店,你没有选择,你只能被迫喝果汁。
ASP.NET Webform 给你一个选择,而 MVC 迫使你遵循最佳实践。所以使用 Webform,我可以选择使用 HTML,禁用视图状态,但是 RAD 的人性诱惑是如此强烈,以至于大多数时候,人们最终会使用这些功能。
另一方面,MVC 不提供后端代码、服务器控件、视图状态等选项,从而迫使您使用纯 HTML,并且不使用后端代码架构。
我们鼓励您阅读以下文章,以进一步提升您的 ASP.NET MVC 知识。
如果你想开始学习 MVC,这篇 MVC 文章 将在 7 天内逐步教授 ASP.NET MVC。
如果您想详细了解 MVC 与 Webforms,这两篇文章非常值得一读。
如果您正在准备 MVC 面试,请不要错过 100 个 ASP.NET MVC 面试问题系列。
如需进一步阅读,请观看下面的面试准备视频和分步视频系列。