2016-04-27 4 views
0

J'ai une question sur Entity Framework 6 et ToListAsync()/ToList().Entity Framework 6 et Async() Performance

Si j'ai une petite quantité de données (environ 1000 lignes), j'ai remarqué que ToListAsync() est plus rapide que ToList().

Mais si j'ai une énorme quantité de données (environ 600.000 lignes) ToList() est plus rapide que ToListAsync().

Ici, vous pouvez bien le code, quelqu'un peut m'expliquer pourquoi ?.

//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; 
} 

Répondre

1

Je pense que ce n'est pas un problème de votre query.This est une question de cadre EF 6+ itself.I personnellement n'a pas fait de R & D à propos Asyn vc Sync .Mais j'ai trouvé quelques messages utiles à ce sujet.Espoir que cela vous aidera.

Quand utiliser vraiment async?

Dans la plupart des applications à l'aide async aura pas d'avantages notables et même pourrait être préjudiciable. Utilisez des tests, le profilage et le bon sens pour mesurer l'impact de l'async dans votre scénario particulier avant de s'y engager.

est que l'article: Async Query & Save (EF6 onwards)

Et voici la grande recherche effectuée par l'un des Stackoveflow user.You peut lire que too.Great un.

Entity Framework async operation takes ten times as long to complete