2017-10-14 2 views
0

Utilisation de la mémoire pour une des lignes fictives 2 millions DATATABLE en utilisant .NET Core 2.0 est de 694 Mo, mais en utilisant .NET Framework, il est 405 MB.NET de base DataTable Utilisation de la mémoire

Pourquoi cet écart?

Ceci est le même code d'échantillon utilisé dans une application console pour les deux plates-formes:

DataTable dt = new DataTable(); 
dt.Columns.Add("a"); 
dt.Columns.Add("b"); 
dt.Columns.Add("c"); 

var watch = Stopwatch.StartNew(); 

for (int i = 0; i < 2000000; i++) 
{ 
    var row = dt.NewRow(); 
    row["a"] = i; 
    row["b"] = i; 
    row["c"] = i; 
    dt.Rows.Add(row); 
} 
watch.Stop(); 

Console.WriteLine("Time:" + watch.ElapsedMilliseconds.ToString()); 
Console.WriteLine("Memory (MB):" + GC.GetTotalMemory(false)/1048576); 
Console.WriteLine("Working set (MB):" + Process.GetCurrentProcess().WorkingSet64/1048576); 
+3

Peut-être l'un est en cours d'exécution en tant que Application 32 bits tandis que l'autre fonctionne comme une application 64 bits? Essayez d'imprimer un message indiquant ce qu'il est avant de démarrer le chronométrage. Voir [Comment savoir si mon application s'exécute en tant qu'application 32 bits ou 64 bits?] (Https://stackoverflow.com/q/266082) . – dbc

+2

@dbc vous avez raison "Préférer 32 bits" a été cochée par défaut pour la version Full Framework –

+0

Content de vous aider. Donc, ajoutez une réponse, ou fermez comme "un problème qui ne peut plus être reproduit ou une simple erreur typographique"? – dbc

Répondre

0

« Préférez 32 bits » a été cochée par défaut pour le cadre Version complète