Performance 性能实体框架代码优先
我在使用代码优先和实体框架时遇到性能问题。我只想读一个简单的映射信息,最长可达3秒Performance 性能实体框架代码优先,performance,entity-framework-6,ef-code-first,Performance,Entity Framework 6,Ef Code First,我在使用代码优先和实体框架时遇到性能问题。我只想读一个简单的映射信息,最长可达3秒 // The enity [Table("ResourceMappingEntity")] public class ResourceMappingEntity { /// <summary> /// Gets or sets the testing number. /// </summary> /// &l
// The enity
[Table("ResourceMappingEntity")]
public class ResourceMappingEntity
{
/// <summary>
/// Gets or sets the testing number.
/// </summary>
/// <value>
/// The testing number.
/// </value>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
[Required]
[Column(TypeName = "varchar")]
[StringLength(80)]
public string LocationNameOrIp { get; set; }
[Required]
[Column(TypeName = "varchar")]
[StringLength(80)]
public string Resource { get; set; } //todo mb: noch nicht drin
[Column(TypeName = "varchar")]
[StringLength(80)]
public string App { get; set; } //todo mb: noch nicht drin
/// <summary>
/// Gets or sets the created at.
/// </summary>
/// <value>
/// The created at.
/// </value>
[Column(TypeName = "datetime2")]
public DateTime CreatedAt { get; set; }
}
//the query
using (var ctx = new OsmaTestingContextFactory().Create())
{
ctx.Configuration.ProxyCreationEnabled = false;
var two = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
var dif = two - one;
IEnumerable<string> res = await ctx.ResourceMappingEntityStorage.AsNoTracking()
.Where(
x => x.LocationNameOrIp == IPOrName)
.Select(y => y.Resource)
.ToListAsync();
var three = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
var dif2 = three - two;
if (res.Count() != 1)
{
throw new Exception("Can not find a specific resouce");
}
return res.First();
}
// I also set IsUnicode to false....
//人性
[表(“ResourceMappingEntity”)]
公共类ResourceMappingEntity
{
///
///获取或设置测试编号。
///
///
///测试号码。
///
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
公共长Id{get;set;}
[必需]
[列(TypeName=“varchar”)]
[条次建议修正案(80)]
公共字符串LocationNameOrIp{get;set;}
[必需]
[列(TypeName=“varchar”)]
[条次建议修正案(80)]
公共字符串资源{get;set;}//todo mb:noch nicht drin
[列(TypeName=“varchar”)]
[条次建议修正案(80)]
公共字符串App{get;set;}//todo mb:noch nicht drin
///
///获取或设置在处创建的。
///
///
///在中创建的。
///
[列(TypeName=“datetime2”)]
public DateTime CreatedAt{get;set;}
}
//询问
使用(var ctx=new OsmaTestingContextFactory().Create())
{
ctx.Configuration.ProxyCreationEnabled=false;
var two=DateTime.Now.Ticks/TimeSpan.tick毫秒;
var dif=2-1;
IEnumerable res=wait ctx.ResourceMappingEntityStorage.AsNoTracking()
.在哪里(
x=>x.LocationNameOrIp==IPOrName)
.选择(y=>y.Resource)
.ToListAsync();
var three=DateTime.Now.Ticks/TimeSpan.tick毫秒;
var dif2=三-二;
如果(分辨率计数()!=1)
{
抛出新异常(“找不到特定资源”);
}
返回res.First();
}
//我还将IsUnicode设置为false。。。。
有什么想法吗
希望得到帮助或其他解决方案?!应该在几毫秒内就可以了,就像在SQL管理studio中一样
是否有一个好的或标准的方法来测试ef的性能
Thx
Marcus查询是否发生在单元测试中?是的,在本例中。但是在我的普通代码中,它也很慢。你写的时间是dif2?是的,对不起。这应该是查询数据的时间。表中有多少行?为什么使用ToListSync()和First()?如果不必初始化列表,可以更快地完成查询。查询是否在UnitTest中进行?是的,在本例中。但是在我的普通代码中,它也很慢。你写的时间是dif2?是的,对不起。这应该是查询数据的时间。表中有多少行?为什么使用ToListSync()和First()?如果不必初始化列表,您可以更快地获得它。