C# 加载非托管 DLL : big performance difference between console application and webapp on IIS

标签 c# asp.net performance iis unmanaged

我有一个基于 ASP.NET 用 C# 编写的 webapp。
它加载(使用 LoadLibraryEx )一个用 C++Builder 编写的非托管 DLL。
由于我有性能问题,我做了一些测试和比较,在 DLL 中始终运行相同的方法多次,获得平均时间。
我发现DLL:

  • 由 C++Builder 控制台应用程序加载,耗时:4.922 秒
  • 由 C# 控制台应用程序加载,耗时:5.484 秒
  • 由托管在 IIS 7.5 上的最小 C# ASP.NET 应用程序加载,耗时:9.551 秒

  • 如您所见,案例 1 和案例 2 的性能非常相似。
    为什么情况 3 这么慢?也许 IIS 会减慢 DLL 的速度?
    为此,我使用 JetBrains dotTrace 进行了分析:
    enter image description here
    是否有任何建议的 IIS 调整?
    是否有任何建议的快速替代 IIS 来托管 ASP.NET webapps?
    我应该考虑将 webapp 移植到 C++Builder 吗?
    编辑 :
    我尝试将我的 webapp 迁移到 ASP.NET Core(而不是 .NET Framework)并在 Kestrel 上运行它。需要 6.042 秒。因此,与控制台应用程序相比,开销并不大。
    看来 IIS 是罪魁祸首...为什么?

    最佳答案

    可以解释您的结果的一个原因是 IIS(默认情况下)直到第一次访问它时才会加载您的 Web 应用程序。这可能会导致它花费更长的时间,因为它会在您导航到站点后启动整个应用程序,而控制台应用程序将在调用它的类加载到内存中后立即加载库。

    关于C# 加载非托管 DLL : big performance difference between console application and webapp on IIS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62957044/

    相关文章:

    c# - 为什么有人用 "None"作为枚举成员?

    c# - C# 类中的绑定(bind)(映射)Json

    php - GROUP BY 和 ORDER BY 太慢了。如何使速度更快?

    python - 检查记录是否存在于 MongoDB 中

    c# - 在任务栏中最小化表单时将其置于最前面

    c# - 从mysql实时更新C#客户端

    javascript - 从 URL 获取值(value)

    javascript - 获取图像可见区域状态以将 Canvas 中的图像设置在先前拖动的位置

    c# - AE.Net.Mail message.value 为空

    performance - Ember.js 应用程序的加载时间极长