【问题标题】:Performance difference between .NET method (in .dll) and reflected version.NET 方法(在 .dll 中)和反射版本之间的性能差异
【发布时间】:2013-02-09 00:30:42
【问题描述】:

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

使用 RedGate 分析器工具,我确定我们功能的最佳性能约为总页面负载的 8%。当我使用 .NET 函数(在接受它的页面上)时,它大约占页面总负载的 0.08%。我们反射 .NET 函数以查看它们在工作什么魔法,当我将反射代码复制到函数中并直接运行它时,它的执行率约为 10%。

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

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

【问题讨论】:

  • 有趣。只是确保,但是您在同一 PC 和页面上的发布模式下运行了这些基准测试,对吗?哦,您是否在同一次运行中多次运行测试以确保 JIT 在您对其进行基准测试之前已经生成了所有代码?
  • 实际运行时是否发生了变化,或者只是整个页面加载的一小部分?也许页面更复杂,总的速度更慢。
  • .NET 函数的准备方式不同,因为它是由 Microsoft 的向导创建的。
  • @Merrdin 你确定你不包括 JIT 成本吗?换句话说,如果您第二次执行相同的功能,是否会发生同样的情况?
  • @Merrdin:嗯。您是否尝试过运行 NGEN 并将程序集放入 GAC?

标签: c# .net dll assemblies


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-09-16
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 2010-11-21
    • 2012-05-26
    相关资源
    最近更新 更多