网络中的反思和表现

Ser*_*lov 4 reflection asp.net-mvc

我们知道Reflection是一个相当昂贵的引擎.但是,ASP.NET MVC充满了它.有很多方法可以使用和实现其他基于反射的实践,如ORM,DTO实体之间的不同映射 - 视图模型,DI框架,JSON解析和许多其他实现.
所以我想知道它们是否都会影响性能,强烈建议尽可能避免使用反射并找到脚手架等其他解决方案?什么是执行服务器负载测试的工具?

Dar*_*rov 6

反思没有错.只是明智地使用它,也就是缓存结果,这样你就不必一遍又一遍地执行那些昂贵的调用.反射在ASP.NET MVC中广泛使用.例如,当从路径解析控制器和动作名称时,使用Reflection来查找要调用的相应方法.除了一旦找到,结果被缓存,以便下次有人请求相同的控制器和动作名称时,将从缓存中获取要调用的方法.

因此,如果您正在使用第三方框架,请检查文档/源代码是否使用反射以及是否缓存这些调用的结果.

如果你必须在你的代码中使用它,同样的规则适用=>缓存它.


Lev*_*lho 3

对于压力测试,这篇 SO 文章提供了相当多的可能性:Stress Test ASP.Net application


我自己也思考过这个问题,并得出以下结论:

  • 大多数人不会花时间一遍又一遍地重新提交页面。当考虑到访问实际网站所花费的时间时,用户花在阅读和使用最坏情况下包含一些 Ajax 调用的页面的时间是最少的。即使您的应用程序有一百万个并发用户,您通常也不必在任何给定时间处理一百万个请求。

  • Web 自然是基于字符串比较的……HTTP 响应中没有类型,因此任何 Web 应用程序都被迫将处理此类任务作为日常生活的事实。字符串比较和动态对象越少越好,但它们是其核心,是不可避免的。

  • 尽管通过字符串比较或动态类型检查进行映射之类的操作速度很慢,但使用 PHP 等非编译弱类型语言构建的站点将包含更多此类操作。尽管与 C# 控制台应用程序相比,MVC 可能会降低性能,但与 Web 领域中的许多其他解决方案相比,它仍然是一个优越的解决方案。

  • 任何框架的使用都会产生与之相关的性能成本。出于所有意图和目的,使用 .NET 框架用 C# 构建的应用程序的性能不如用 C++ 编写的应用程序。然而,其好处是更高的可靠性、更快的编码时间和更容易的测试等。考虑到计算机的速度在过去一两年里呈爆炸式增长,我们已经开始接受时不时地多花几毫秒来换取这些好处(这是巨大的)。

鉴于这些要点,在开发 ASP.NET MVC 应用程序时,我不会像瘟疫一样避免诸如反射之类的事情,因为很明显它们可以对应用程序的功能产生相当积极的影响。它们是工具,如果使用得当,会给许多应用程序带来巨大的好处。

至于性能,我喜欢构建最好的解决方案,然后返回并对其进行压力测试。也许我在 X 类中实现的反射根本不是性能问题?简而言之,我的首要任务是构建一个出色的架构,第二个任务是对其进行优化,以充分利用其性能。