c# - .NET 方法(在 .dll 中)和反射(reflect)版本之间的性能差异

标签 c# .net dll assemblies

我一直在尝试优化 JavaScript 编码函数(在 C# 中)以提高其性能(在提高企业 Web 应用程序性能的整体尝试中)。我们尝试使用 .NET HttpUtility.JavaScriptStringEncode,但它没有按照我们的数据层预期的方式进行编码(并且更改数据层不在表中)。

我使用 RedGate 分析器工具确定我们函数的最佳性能是总页面负载的 8% 左右。当我使用 .NET 函数时(在接受它的页面上),它占总页面加载量的 0.08% 左右。我们反射(reflect)了 .NET 函数以查看它们在起作用,当我将反射(reflect)的代码复制到函数中并直接运行它时,它的执行速度约为 10%。

我很好奇为什么。 .NET 函数如何以不同的方式准备来奖励这种性能提升?

我提前道歉,但我无法粘贴我们正在使用的功能,但我认为这不会影响回答问题。

最佳答案

您能否将反射代码粘贴到您的库中后生成的 IL 代码与 .NET 库中存在的 IL 代码进行比较?用于编译的编译器开关可能会导致此类差异。

关于c# - .NET 方法(在 .dll 中)和反射(reflect)版本之间的性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14783539/

相关文章:

c# - C# 不支持手动内联方法有什么原因吗?那么可选参数呢?

c# - jQuery 将 null 而不是 JSON 发送到 ASP.NET Web API

.net - ListenUriMode.Unique如何为客户工作?

c# - 如何在Mono/MonoDevelop中使用System.Windows?

c# - 如何从非托管 DLL 访问 csharp 中包含动态数组的结构?

c++ - 是否可以在不指定包含的情况下创建 dll

c# - 如何创建自定义 JSchemaGenerationProvider 以将 title 属性添加到模型和模型的属性中?

c# - 为什么第一次调用值为 11.5 的 Round(Double) 方法返回 11 而不是 12?

c# - 在 .NET 中以编程方式配置网络适配器的最佳方式

c++ - Qt5应用部署qwindows.dll搜索路径顺序