C# Azure功能应用程序与.NET Framework+;MARS(多个活动记录集)

C# Azure功能应用程序与.NET Framework+;MARS(多个活动记录集),c#,sql-server,azure,azure-function-app,sql-server-mars,C#,Sql Server,Azure,Azure Function App,Sql Server Mars,我们有一个v1 Azure功能应用程序。它必须是v1,因为我们的客户坚持使用.NET框架,因为他们的组织熟悉该框架,并且没有迁移到.NET核心 我们的架构师已经规定在connectionString上将MARS(多个活动记录集)设置为false,因为Azure函数应用程序是多线程的,并且MARS不是线程安全的,如:- 最初它是用DbDataReader实现的,我们也用DbDataAdapter实现了它。 有问题的SP返回两个结果集,并执行sub 1秒。 函数应用程序和Azure SQL Serv

我们有一个v1 Azure功能应用程序。它必须是v1,因为我们的客户坚持使用.NET框架,因为他们的组织熟悉该框架,并且没有迁移到.NET核心

我们的架构师已经规定在connectionString上将MARS(多个活动记录集)设置为false,因为Azure函数应用程序是多线程的,并且MARS不是线程安全的,如:-

最初它是用DbDataReader实现的,我们也用DbDataAdapter实现了它。 有问题的SP返回两个结果集,并执行sub 1秒。 函数应用程序和Azure SQL Server实例位于同一Azure区域中

我们已经做了更深入的概要文件跟踪,请求需要3-7秒(有时甚至更长)来填充数据集(在您说返回到reader之前,同样的性能也会发生)。这适用于零行的结果集。类似地,SP在1秒内执行。网络性能来自世界的另一个地区(英国的SQL,ZA的开发),从欧洲到非洲(我们正在执行的地方),它仍然在不到1秒的时间内穿越

深入检查后,填充需要很长时间:


我们不能再做什么来优化代码了

问题是:

  • 可以在Azure Function应用程序使用的连接字符串上安全地启用MARS吗?如果不能,为什么不能
  • 我们如何在.NET Framework Azure Function应用程序中使数据填充更高效
  • 所讨论的函数应用程序有其他方法等。如果我们不能使用MARS或进行其他性能调整/调整,那么我们当前的想法是,我们必须将此特定方法调用拆分为某种v2.NET核心函数应用程序或其他性能数据填充方法


    该客户非常注重成本(哪个客户不是?),而且他们对Azure中的额外资源非常谨慎——想想深层次的官僚作风吧——因此优化或使用MARS(或另一个ConnString调整)是首选。

    “我们无法再做任何事来优化代码了。”这从来都不是真的。上述代码使用的是古老的framework1.1ado.NET
    DataSet
    s和
    DbDataAdapter
    s,这意味着它尤其不真实。在我看来,您的客户对框架的坚持实际上是对从不更新代码的坚持,而这种“策略”最终以您当前所处的确切情况结束。告诉客户这是性能问题,这是他们“成本意识”的最终结果,除非你转向核心,否则你无法改善这一点。@IanKemp-我很欣赏这一点。话虽如此,问题的本质不是转移到核心,我接受这是一个解决方案。我试图确认v1中Azure Function应用程序中多线程的一个特殊点,那就是不可能对MARS进行真/阻塞。“更新总是更好”当然是一个有效的出发点-然而,在这个特殊的情况下,不会飞-我们是一个50人的开发商店。他们是一家拥有4万名员工的公司。由于不对称造成的挑战,我们正在结束与他们的工作。但这仍然是一个技术问题。