Performance 性能实体框架代码优先

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

我在使用代码优先和实体框架时遇到性能问题。我只想读一个简单的映射信息,最长可达3秒

// 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()?如果不必初始化列表,您可以更快地获得它。