Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 帕尼。这里所有的评论都给这个问题带来了真知灼见,所以我感谢大家的帮助。当我最终解决它时,它将返回并更新答案。再次感谢如果你的代码可以工作,但你需要一个性能改进建议,最好在网站上发布一个问题。另外,你是从数据库查询的吗?您是否尝试过仅在DB上对查询进行基准测_C#_.net_Performance_Linq_Iteration - Fatal编程技术网

C# 帕尼。这里所有的评论都给这个问题带来了真知灼见,所以我感谢大家的帮助。当我最终解决它时,它将返回并更新答案。再次感谢如果你的代码可以工作,但你需要一个性能改进建议,最好在网站上发布一个问题。另外,你是从数据库查询的吗?您是否尝试过仅在DB上对查询进行基准测

C# 帕尼。这里所有的评论都给这个问题带来了真知灼见,所以我感谢大家的帮助。当我最终解决它时,它将返回并更新答案。再次感谢如果你的代码可以工作,但你需要一个性能改进建议,最好在网站上发布一个问题。另外,你是从数据库查询的吗?您是否尝试过仅在DB上对查询进行基准测,c#,.net,performance,linq,iteration,C#,.net,Performance,Linq,Iteration,帕尼。这里所有的评论都给这个问题带来了真知灼见,所以我感谢大家的帮助。当我最终解决它时,它将返回并更新答案。再次感谢如果你的代码可以工作,但你需要一个性能改进建议,最好在网站上发布一个问题。另外,你是从数据库查询的吗?您是否尝试过仅在DB上对查询进行基准测试,以查看实际的C#工作是否导致性能问题,或者DB查询本身的性能不佳?我相信在IMO中有几个方面可以改进。我觉得您进行了太多的上下文调用,而且我也觉得您在这样做时获取了太多的信息,然后依靠缓存的数据获得结果。其中之一就是.Sum()。你应该在V



帕尼。这里所有的评论都给这个问题带来了真知灼见,所以我感谢大家的帮助。当我最终解决它时,它将返回并更新答案。再次感谢如果你的代码可以工作,但你需要一个性能改进建议,最好在网站上发布一个问题。另外,你是从数据库查询的吗?您是否尝试过仅在DB上对查询进行基准测试,以查看实际的C#工作是否导致性能问题,或者DB查询本身的性能不佳?我相信在IMO中有几个方面可以改进。我觉得您进行了太多的上下文调用,而且我也觉得您在这样做时获取了太多的信息,然后依靠缓存的数据获得结果。其中之一就是
.Sum()
。你应该在VS中使用断点,检查每一步,看看最大的瓶颈在哪里,但我觉得这只是所有瓶颈的混合。在VS中,您应该能够在MS中看到断点之间的时间,这可以帮助您缩小部分问题的范围。我已经测试了每个查询,数据库正常。现在我将与我公司的一些资深人员一起处理这些问题。这里所有的评论都给这个问题带来了真知灼见,所以我感谢大家的帮助。当我最终解决它时,它将返回并更新答案。谢谢again@MichaelPuckettIIADO.NET并不“比Linq慢”——这是一个荒谬的说法。像EF和L2S这样的LINQ提供者位于ADO.NET之上;他们不能比他们正在使用的工具——ADO.NET——更快。现在,如果您非常幸运,那么解析表达式树、将其与模型配置(实体/存储)进行比较并生成一个查询将不需要任何可测量的时间,如果您更幸运的话,查询将是相当不错的。但对于这样一个复杂的场景,这听起来不太可能。所以LINQ充其量也“一样好”,但最有可能的是:比编写良好的SQL糟糕得多。在这种特殊情况下使用纯SQL更好吗?@LucasHipólito在我看来:绝对好。应该编写为一个SQL查询,从顶层循环所需的任何输入开始,使用CTE、嵌套查询或子查询的任何组合;然后大概是一个“groupby”总和,这样你就可以得到一个单一的网格,每个公司/总和对有一行。如果没有你的数据库,我很难显示SQL,不过…@MarcGravel我收回了我的评论。我倒过来道歉了。然而;我仍然觉得这是一个建议,不一定是一个答案;至少不是一个完整的答案。@MichaelPuckettII我不反对;我很想发布一个更全面的扩展,但如果没有直接的SSM或SSM,这几乎是不可能的similar@MichaelPuckettIIADO.NET并不“比Linq慢”——这是一个荒谬的说法。像EF和L2S这样的LINQ提供者位于ADO.NET之上;他们不能比他们正在使用的工具——ADO.NET——更快。现在,如果您非常幸运,那么解析表达式树、将其与模型配置(实体/存储)进行比较并生成一个查询将不需要任何可测量的时间,如果您更幸运的话,查询将是相当不错的。但对于这样一个复杂的场景,这听起来不太可能。所以LINQ充其量也“一样好”,但最有可能的是:比编写良好的SQL糟糕得多。在这种特殊情况下使用纯SQL更好吗?@LucasHipólito在我看来:绝对好。应该编写为一个SQL查询,从顶层循环所需的任何输入开始,使用CTE、嵌套查询或子查询的任何组合;然后大概是一个“groupby”总和,这样你就可以得到一个单一的网格,每个公司/总和对有一行。如果没有你的数据库,我很难显示SQL,不过…@MarcGravel我收回了我的评论。我倒过来道歉了。然而;我仍然觉得这是一个建议,不一定是一个答案;至少不是一个完整的答案。@MichaelPuckettII我不反对;我很想发布一个更全面的扩展,但如果没有直接的SSM或类似的服务,这几乎是不可能的
public List<object> GetCNAEBRCycleChart(int VisitId)
    {
        List<object> result = new List<object>();


        Visit visit = Context.Visit.Find(VisitId);
        Company company = visit.Company;
        var CNAE = company.MainEconomicCNAE.IdentifyCNAE;

        string[] Themes = new string[5];

        Themes[0] = "Finance";
        Themes[1] = "Market";
        Themes[2] = "Organization";
        Themes[3] = "Planning";
        Themes[4] = "People";

        int count = 0;

        List<Visit> listVisitCNAECountry = (from vis in Context.Visit
                                            where vis.Company.MainEconomicCNAE.IdentifyCNAE.StartsWith(CNAE)
                                                && vis.Order == 1
                                             select vis
                                                ).ToList();

        double[] Values = new double[5];

        Values[0] = 0;
        Values[1] = 0;
        Values[2] = 0;
        Values[3] = 0;
        Values[4] = 0;

        foreach (var vis in listVisitCNAECountry)
        {
            count = 0;
            var visitIdCompany = vis.Id;

            var diagnostic = Context.Visit.Find(visitIdCompany).Diagnostic;

            if (diagnostic != null)
            {
                foreach (var itemTheme in Themes)
                {
                    var TemaAux = itemTema;
                    int QtQuestion = (from itemForm in Context.FormItem
                                        join tipo in Context.FormItemType on itemForm.FormItemTypeId equals tipo.Id
                                        join itemForm2 in Context.FormItem on itemForm.FormItemParentId equals itemForm2.Id
                                        join itemForm3 in Context.FormItem on itemForm2.FormItemParentId equals itemForm3.Id
                                        where itemForm3.Name == TemaAux && tipo.Name == "Pergunta"
                                        select itemForm
                                              ).Count();

                    var sumAnswerCompany = (from alter in Context.Alternative
                                            join itemForm in Context.FormItem on alter.FormItemId equals itemForm.Id
                                            join itemForm2 in Context.FormItem on itemForm.FormItemParentId equals itemForm2.Id
                                            join itemForm3 in Context.FormItem on itemForm2.FormItemParentId equals itemForm3.Id
                                            join answer in Context.Answer on itemForm.Id equals answer.FormItemId
                                            where answer.AlternativeId == alter.Id &&
                                            answer.DiagnosticId == diagnostico.Id && itemForm3.Name == TemaAux

                                            select alter.Value
                                    ).AsEnumerable().Sum();

                    double scoreCompany = //Some calculations

                    Values[count] += scoreCompany;
                    count++;
                }
            }
        }

        count = 0;

        foreach (var val in Values)
        {
            Values[count] = //more calculations
            count++;
        }

        var model = new { NameCategory = "CNAE in Country", Value1 = Values[0], Value2 = Values[1], Value3 = Values[2], Value4 = Values[3], Value5 = Values[4] };

        result.Add(model);

        return result;
    }
                var sumAnswerCompany = ( /* complex query */
                                ).AsEnumerable().Sum();
                var sumAnswerCompany = ( /* complex query */
                                ).Sum();