Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 加速实体框架_C#_Entity Framework_Asp.net Mvc 4 - Fatal编程技术网

C# 加速实体框架

C# 加速实体框架,c#,entity-framework,asp.net-mvc-4,C#,Entity Framework,Asp.net Mvc 4,我一直在寻找使用MVC2和EF4优化web应用程序的方法。对于包含14列的约10k行,列出查询花费了约22秒,这显然太慢了 因此,作为这项工作的一部分,我已经升级到MVC4和EF6.1(VS2010的最高版本) 对于只读查询,我在查询中添加了.AsNoTracking(),这将时间减少到了~3秒。我想知道是否还有什么我可以做的,使它下降到~1秒 到目前为止,我的代码是: category = CategoryHelper.MapToOldFormat(category); var mainIds

我一直在寻找使用MVC2和EF4优化web应用程序的方法。对于包含14列的约10k行,列出查询花费了约22秒,这显然太慢了

因此,作为这项工作的一部分,我已经升级到MVC4和EF6.1(VS2010的最高版本)

对于只读查询,我在查询中添加了.AsNoTracking(),这将时间减少到了~3秒。我想知道是否还有什么我可以做的,使它下降到~1秒

到目前为止,我的代码是:

category = CategoryHelper.MapToOldFormat(category);
var mainIds = Repository.Categories
               .Include(o => o.LinkedCategories)
               .Where(o => o.Category1.Contains(category))
               .AsNoTracking()
               .ToList();
var linkedCats = mainIds.SelectMany(o => o.LinkedCategories).Union(mainIds).Select(c => c.Id);

var notifications = Repository.Notifications
                .Include(o => o.Country)
                .Include(o => o.NonEUCountries)
                .Include(o => o.Language)
                .Include(o => o.RAW)
                .Include(o => o.RAW.Classification)
                .Include(o => o.RAW.TransactionPN)
                .AsNoTracking();

if (id != null)
{
    notifications = notifications.Where(o => o.Id == id);
}

if (!string.IsNullOrWhiteSpace(category))
{
    notifications = notifications.Where(o => linkedCats.Contains(o.RAW.Classification.CategoryID));
}

return notifications.Logged(MethodBase.GetCurrentMethod()).ToList();
在基准类别中,wand id为null,因此不会生成In for类别。我将在将来用intflag替换它,作为支持多个类别的快速方法


这个示例查询还有其他大的性能问题吗?

首先,列出10k个结果是痛苦的。您需要对大型数据集使用分页

想象一下,将关系数据移动到某个类的10k实例并注入自跟踪或延迟加载等运行时功能的成本。一个10k迭代的循环,其中每个迭代都有复杂的代码。默认情况下应该很慢,不是吗

因此,您似乎需要利用LINQ的扩展方法

另一个改进是分析数据库和对象模型中的当前数据模式,因为1表即1类(具有14列/属性)可能是一个问题:分段设计可能会改进您的场景

无论如何,寻呼将是你的朋友。这将把查询时间减少到几分之一秒

更新 @Phyx在一些评论中说:

我继承了这个项目,没有预算来改变所有的项目 清单


如果你不能改变这一点。1个用户应该会收到这些未优化(不可优化…)查询的影响,其余的用户将消耗一个输出缓存,该缓存可能会在很短的时间间隔内持续,但它可能足以加速应用程序并减少加载时间。

首先,列出10k个结果是痛苦的。您需要对大型数据集使用分页

想象一下,将关系数据移动到某个类的10k实例并注入自跟踪或延迟加载等运行时功能的成本。一个10k迭代的循环,其中每个迭代都有复杂的代码。默认情况下应该很慢,不是吗

因此,您似乎需要利用LINQ的扩展方法

另一个改进是分析数据库和对象模型中的当前数据模式,因为1表即1类(具有14列/属性)可能是一个问题:分段设计可能会改进您的场景

无论如何,寻呼将是你的朋友。这将把查询时间减少到几分之一秒

更新 @Phyx在一些评论中说:

我继承了这个项目,没有预算来改变所有的项目 清单


如果你不能改变这一点。1个用户应该会收到这些未优化(不可优化…)查询的影响,其余的用户将消耗一个输出缓存,该缓存可能会在很短的时间间隔内持续,但它可能足以加速应用程序并减少加载时间。

首先,列出10k个结果是痛苦的。您需要对大型数据集使用分页

想象一下,将关系数据移动到某个类的10k实例并注入自跟踪或延迟加载等运行时功能的成本。一个10k迭代的循环,其中每个迭代都有复杂的代码。默认情况下应该很慢,不是吗

因此,您似乎需要利用LINQ的扩展方法

另一个改进是分析数据库和对象模型中的当前数据模式,因为1表即1类(具有14列/属性)可能是一个问题:分段设计可能会改进您的场景

无论如何,寻呼将是你的朋友。这将把查询时间减少到几分之一秒

更新 @Phyx在一些评论中说:

我继承了这个项目,没有预算来改变所有的项目 清单


如果你不能改变这一点。1个用户应该会收到这些未优化(不可优化…)查询的影响,其余的用户将消耗一个输出缓存,该缓存可能会在很短的时间间隔内持续,但它可能足以加速应用程序并减少加载时间。

首先,列出10k个结果是痛苦的。您需要对大型数据集使用分页

想象一下,将关系数据移动到某个类的10k实例并注入自跟踪或延迟加载等运行时功能的成本。一个10k迭代的循环,其中每个迭代都有复杂的代码。默认情况下应该很慢,不是吗

因此,您似乎需要利用LINQ的扩展方法

另一个改进是分析数据库和对象模型中的当前数据模式,因为1表即1类(具有14列/属性)可能是一个问题:分段设计可能会改进您的场景

无论如何,寻呼将是你的朋友。这将把查询时间减少到几分之一秒

更新 @Phyx在一些评论中说:

我继承了这个项目,没有预算来改变所有的项目 清单


如果你不能改变这一点。1个用户应该会收到这些未优化(不可优化…)查询的影响,其余用户将消耗一个输出缓存,该缓存可能会持续很短的时间间隔,但这可能足以加速应用程序并减少加载时间。

使用EF Profiler()查看有关慢速查询的更多详细信息。可能重复。EF 6.1似乎有一系列的性能问题。@Patrickhoffman,可能重复提到启动性能。我已经运行了多次基准测试,以降低基准测试对测试的影响。所以我不认为这是重复的,好的。它似乎比刚开始的表现更广泛。@magicandre1981有免费的工具吗?从仅仅执行我在sql中看到的sql