Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc web中的反射与性能_Asp.net Mvc_Reflection - Fatal编程技术网

Asp.net mvc web中的反射与性能

Asp.net mvc web中的反射与性能,asp.net-mvc,reflection,Asp.net Mvc,Reflection,我们知道反射是一个相当昂贵的引擎。然而ASP.NETMVC却充满了它。还有很多方法可以使用和实现其他基于反射的实践,如ORM、DTO实体之间的不同映射、视图模型、DI框架、JSON解析和许多其他方法。 所以我想知道它们是否都会对性能产生如此大的影响,以至于强烈建议尽可能避免使用反射,并找到其他解决方案,如脚手架等?什么是执行服务器负载测试的工具?对于压力测试,这篇文章给出了很多可能性: 我自己也思考过这个问题,并得出以下结论: 大多数人不会把时间花在一次又一次地重新提交页面上。当考虑到访问实

我们知道反射是一个相当昂贵的引擎。然而ASP.NETMVC却充满了它。还有很多方法可以使用和实现其他基于反射的实践,如ORM、DTO实体之间的不同映射、视图模型、DI框架、JSON解析和许多其他方法。

所以我想知道它们是否都会对性能产生如此大的影响,以至于强烈建议尽可能避免使用反射,并找到其他解决方案,如脚手架等?什么是执行服务器负载测试的工具?

对于压力测试,这篇文章给出了很多可能性:


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

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

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

  • 虽然通过字符串比较或动态类型检查进行映射的速度很慢,但使用非编译、弱类型语言(如PHP)构建的站点将包含更多此类操作。尽管与C#console应用程序相比,MVC中可能会有很多性能问题,但它仍然是web领域中许多其他应用程序的优秀解决方案

  • 任何框架的使用都会带来与之相关的性能成本。在.NET中用.NET框架构建的应用程序将不适用于所有的目的和目的,也不适用于C++编写的应用程序。然而,它的好处是可靠性更好,编码速度更快,测试更容易。考虑到计算机的速度在过去的十年或二十年中是如何爆炸式增长的,我们已经开始接受一些额外的毫秒来换取这些好处(这是巨大的)

鉴于以上几点,在开发ASP.NET MVC应用程序时,我不会避免像瘟疫一样的反射,因为很明显,它们会对应用程序的运行方式产生非常积极的影响。它们是工具,如果使用得当,对许多应用程序都有很大的好处


至于性能,我喜欢尽我所能构建最佳解决方案,然后回去对其进行压力测试。也许我在类X中实现的反射毕竟不是性能问题?简言之,我的第一个任务是构建一个伟大的体系结构,第二个任务是优化它,从中挤出最后一点性能。

反射没有什么错。只要明智地使用它,即缓存结果,这样您就不必反复执行那些昂贵的调用。反射在ASP.NET MVC中被广泛使用。例如,当从路由解析控制器和操作名称时,将使用反射来查找要调用的相应方法。除此之外,一旦找到,结果将被缓存,以便下次有人请求相同的控制器和操作名称时,将从缓存中提取要调用的方法

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

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