C#で"IEnumerable"型のメモリ使用量
"IEnumerable"型はメモリ使用量が少ないと聞きますが、
実際にどのくらい少ないのか、
また、どのような処理をすると使用量が増えるのか実際に試してみました。
処理内容
IEnumerable
Create : 0.9453KB
IEnumerable<int> num = Enumerable.Range(0, 100000000);
Select +1 : 0.0938KB
num.Select(x => x + 1);
Where Count : 0.0898KB
int count = num.Where(x => x % 2 == 0).Count();
ToList : 381.7305KB
List<int> list = num.ToList();
まとめ
"IEnumerable"型はそのままで扱う時はメモリ使用量少ないですね。
"ToList()"すると増えてしまうので、できる限り"IEnumerable"のまま使うのがベストですね。
全コード
public static class LinqMemory { private static double previousVal = 0; public static void Check() { UseMemory("Initial"); IEnumerable<int> num = Enumerable.Range(0, 100000000); UseMemory("Create"); num.Select(x => x + 1); UseMemory("Select +1"); int count = num.Where(x => x % 2 == 0).Count(); UseMemory("Where Count"); List<int> list = num.ToList(); UseMemory("ToList"); } public static void UseMemory(string name) { double currentVal = Environment.WorkingSet; double diffVal = (currentVal - previousVal) / 1024 / 1024; Console.WriteLine(string.Format("{0} : {1}KB", name, diffVal.ToString("F4"))); previousVal = currentVal; } }