J'ai créé une application de test simple comme suit.Pourquoi ce code affiche-t-il une consommation de mémoire native plus élevée?
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace PerfMonTest
{
class Program
{
private static List<byte[]> byteArray = new List<byte[]>();
static void Main(string[] args)
{
Console.WriteLine("start now");
Console.ReadLine();
Task t1 = Task.Factory.StartNew(() => { Program.ProcessData(); });
Task.WaitAll(new Task[] { t1});
Console.WriteLine("done ...");
Console.ReadLine();
}
private static byte[] GetData()
{
return new byte[1024 * 1024 * 50];
}
public static void ProcessData()
{
for (int i = 0; i < 50000; i++)
{
byteArray.Add(GetData());
Thread.Sleep(500);
Console.WriteLine("GC Memory consumed:" + Convert.ToString((GC.GetTotalMemory(false)/(1024 * 1024))) + " MB");
}
}
}
}
Bien que cette application est en cours d'exécution, je suis aussi la capture des deux compteurs Private Bytes
et # Bytes in all heaps
. Son résultat ressemble à ceci.
Selon cette article, le graphique devrait ressembler suivant.
Ma question est de savoir pourquoi les octets privés augmentent même si le nombre d'octets dans tous les tas augmente à peine. Ou mon code peut provoquer une fuite natif qui apparaît dans le compteur Private bytes
?