2016-04-27 145 views
0

我有一個關於實體框架6和ToListAsync()/ ToList()的問題。我發現ToListAsync()比ToList()更快。但如果我有大量的數據(大約600.000行),ToList()比ToListAsync()更快。實體框架6和異步()性能

在這裏你可以罰款的代碼,有人可以解釋我爲什麼?

//SharedAnagra contains around 1000 rows 
static List<SharedAnagra> GetSharedAnagraList() 
{ 
    using (Intranet2k3Entities intranet2K3Entities = new Intranet2k3Entities()) 
    { 
     List<SharedAnagra> listaSharedAnagras = (from a in intranet2K3Entities.sharedAnagra 
               select new SharedAnagra 
               { 
                AnagraActive = a.AnagraActive, 
                AnagraId = a.AnagraID, 
                AnagraName = a.AnagraName, 
                OfficeId = a.OfficeID 
               }).ToList(); 

     return listaSharedAnagras; 
    } 
} 

static async Task<List<SharedAnagra>> GetSharedAnagraListAsync() 
{ 
    using (Intranet2k3Entities intranet2K3Entities = new Intranet2k3Entities()) 
    { 
     List<SharedAnagra> listaSharedAnagras = await (from a in intranet2K3Entities.sharedAnagra 
                 select new SharedAnagra 
                 { 
                  AnagraActive = a.AnagraActive, 
                  AnagraId = a.AnagraID, 
                  AnagraName = a.AnagraName, 
                  OfficeId = a.OfficeID 
                 }).ToListAsync(); 

     return listaSharedAnagras; 
    } 
} 


//sharedAnagraNDGClienti contains 950000 rows 
static List<SharedAnagraNdgClienti> ListaSharedNdgClienti() 
{ 
    using (Intranet2k3Entities intranet2K3Entities = new Intranet2k3Entities()) 
    { 
     List<SharedAnagraNdgClienti> lista = (from a in intranet2K3Entities.sharedAnagraNDGClienti 
               select new SharedAnagraNdgClienti 
               { 
                Cm = a.CM, 
                CodFisc = a.CodFisc, 
                Cognome = a.Cognome, 
                Descrizione = a.Descrizione, 
                FilialePrevalente = a.Filiale_Prevalente, 
                Ndg = a.NDG, 
                Nome = a.Nome, 
                Telefono = a.Telefono, 
                Tipologia = a.Tipologia, 
                Trae = a.TRAE, 
                Tsae = a.TSAE 
               }).AsNoTracking().ToList(); 

     return lista; 
    } 
} 

static async Task<List<SharedAnagraNdgClienti>> GetIssueTypeByIdAsync() 
{ 
    List<SharedAnagraNdgClienti> listaSharedAnagraNdgClienti; 

    using (Intranet2k3Entities intranet2K3Entities = new Intranet2k3Entities()) 
    { 
     listaSharedAnagraNdgClienti = await (from a in intranet2K3Entities.sharedAnagraNDGClienti 
              select new SharedAnagraNdgClienti 
              { 
               Cm = a.CM, 
               CodFisc = a.CodFisc, 
               Cognome = a.Cognome, 
               Descrizione = a.Descrizione, 
               FilialePrevalente = a.Filiale_Prevalente, 
               Ndg = a.NDG, 
               Nome = a.Nome, 
               Telefono = a.Telefono, 
               Tipologia = a.Tipologia, 
               Trae = a.TRAE, 
               Tsae = a.TSAE 
              }).AsNoTracking().ToListAsync(); 
    } 

    return listaSharedAnagraNdgClienti; 
} 

回答

1

我覺得這是不是你的query.This的問題是EF 6+框架的問題itself.I個人沒有做任何 - [R & d約Asyn vc Sync。但我已經發現了一些有用的帖子關於這個。希望這對你有幫助。

何時才能真正使用異步?

在使用異步不會有任何明顯的好處,甚至 大多數應用可能是有害的。使用 的測試,分析和常識來衡量 提交之前在您的特定場景中異步的影響。

下面是文章:Async Query & Save (EF6 onwards)

這裏是由Stackoveflow user.You的一個做了大的研究可以讀取too.Great之一。

Entity Framework async operation takes ten times as long to complete