c# - C# 加载非托管 DLL:IIS 上的控制台应用程序和 webapp 之间的巨大性能差异
问题描述
我有一个基于 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 进行了分析:
是否有任何建议的 IIS 调整?
是否有任何建议的快速替代 IIS 来托管 ASP.NET webapps?
我应该考虑将 webapp 移植到 C++Builder 吗?
编辑:
我尝试将我的 webapp 迁移到 ASP.NET Core(而不是 .NET Framework)并在 Kestrel 上运行它。它需要 6.042 秒。因此,与控制台应用程序相比,开销并不大。似乎 IIS 是罪魁祸首……为什么?
解决方案
可能解释您的结果的一个原因是 IIS 不会(默认情况下)加载您的 Web 应用程序,直到第一次访问它。这可能会导致它花费更长的时间,因为它会在您导航到该站点后启动整个应用程序,而控制台应用程序将在调用它的类加载到内存后立即加载该库。
推荐阅读
- javascript - vuejs 拆分为字符串到数组
- math - 如何将纹理的 UV 坐标映射到子矩形的“内部”UV 坐标?
- postgresql - Stack Builder 中缺少 pgAgent 作为选项
- node.js - 如何将静态资产 (html) 提供给使用 nginx 运行的节点服务器?
- css - ScaleY 一个 svg,然后是下面的文本 div
- javascript - Chrome 扩展 - 如何在页面加载时将新元素注入页面?
- angular - 错误:formGroup 需要一个 FormGroup 实例。请传一个;TypeError:无法读取未定义的属性“控件”
- objective-c - 将 NSData 转换为 NSString,但将无效的 UTF-8 替换为 �
- javascript - Javascript减少参数
- api - Flasgger 未能加载 API 定义