gpt4 book ai didi

asp.net-mvc - Aspnet 样板/Aspnet 零慢 (IoC)

转载 作者:行者123 更新时间:2023-12-01 23:31:39 32 4
gpt4 key购买 nike

我将 aspnetboilerplate/aspnetzero 模板用于具有多数据库的 Multi-Tenancy SaaS 应用程序。这使用 CaSTLeWindsor 作为 DI 框架。

我遇到了非常糟糕的性能,我用 dotTrace 跟踪了它 - 它说 CaSTLe.MicroKernel 是最活跃的代码。

我的请求大约需要 5-6 秒,大部分时间在到达 Controller 之前就已经过去了。 (调试时)我认为解析所有服务/ Controller 的速度很慢。我将一些依赖项(应用程序服务)从 Transient 更改为 PerWebRequestLifetime,但它并没有影响性能。

有谁知道,我怎样才能获得更好的性能?

在我的 View (_Layout 文件)中,我调用布局 Controller 上的几个不同的子操作,该 Controller 注入(inject)以下服务:

     public LayoutController(
IPerSessionCache sessionCache,
IUserNavigationManager userNavigationManager,
IMultiTenancyConfig multiTenancyConfig,
ILanguageManager languageManager,
ITenancyNameFinder tenancyNameFinder,
TenantManager tenantManager,
IUserLinkAppService userLinkAppService,
UserManager userManager)

行动是

[ChildActionOnly]
public PartialViewResult AppHeader()
{
var headerModel = new Areas.Mpa.Models.Layout.HeaderViewModel
{
LoginInformations = AsyncHelper.RunSync(_sessionCache.GetCurrentLoginInformationsAsync),
Languages = _languageManager.GetLanguages(),
CurrentLanguage = _languageManager.CurrentLanguage,
IsMultiTenancyEnabled = _multiTenancyConfig.IsEnabled,
IsImpersonatedLogin = AbpSession.ImpersonatorUserId.HasValue,
HasLinkedAccounts = AsyncHelper.RunSync(_userLinkAppService.HasLinkedAccounts)
};

return PartialView("~/Views/Layout/_AppHeader.cshtml", headerModel);
}

[ChildActionOnly]
public PartialViewResult AppNavbar(string currentPageName = "")
{
var sidebarModel = new Areas.Mpa.Models.Layout.NavbarViewModel
{
Menu = AsyncHelper.RunSync(() => _userNavigationManager.GetMenuAsync(MeNavigationProvider.MenuName, AbpSession.ToUserIdentifier())),
CurrentPageName = currentPageName
};

return PartialView("_AppNavbar", sidebarModel);
}

和类似的...但是我使用空布局文件检查了性能,但我的请求仍然花费太长的时间

最佳答案

ASP.NET Boilerplate 性能基准测试结果

我们创建了 2 个相同的简单应用程序:一个带有 ABP ( https://github.com/aspnetboilerplate/aspnetboilerplate-samples/tree/master/TestProjects/AbpPerformanceTestApp )

以及其他没有 ABP ( https://github.com/aspnetboilerplate/aspnetboilerplate-samples/tree/master/TestProjects/StandartTestApp )

使用的框架

  • ASP.NET Core 1.x
  • EF Core 1.x

测试工具

我们使用jMeter进行测试。

测试结果

没有 ABP

Without ABP

使用 ABP

With ABP

从统计数据中可以看出,ABP 在默认的 asp.net 代码之上平均增加了 5 毫秒的开销。由于此开销是 CPU 使用率,因此吞吐量平均有 5% 的差异。

为了更好的比较,我们禁用了 ABP 的日志记录和事务(日志记录特别影响性能,因为它使用 I/O)。其他方面、过滤器和功能默认启用。

关于asp.net-mvc - Aspnet 样板/Aspnet 零慢 (IoC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47263022/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com