Dictionary<string, int[,]> tails = new Dictionary<string, int[,]>();
long size = 0;
foreach (KeyValuePair<string, int[,]> keyValue in tails)
{
size += System.Text.ASCIIEncoding.Unicode.GetByteCount(keyValue.Key);
for (int i = 0; i < 1201; i++)
{
for (int j = 0; j < 1201; j++)
{
size += sizeof(int);
}
}
}
using System.Collections.Generic;
namespace size_of_Dictionary
{
class Program
{
static void Main(string[] args)
{
var tails = new Dictionary<string, int[,]>();
tails.Add("123456789", new int[,] { { 1, 2, 3 }, { 1, 2, 8 } });
tails.Add("12345", new int[,] { { 1, 2 }, { 1, 5 } });
// а сам массив ссылок на пары кто считать будет?
// 4 или 8 зависит от платформы (32/64 бита), и то если компилируется в нативный код
// и напомню, что адресные массивы словарей, списков и тд, выделяются блоками
// размер блока зависит от текущего размера и интенсивности запросов
// так что начальный размер весьма условный
long size = tails.Count * 4;
foreach (var pair in tails)
size +=
pair.Key.Length * sizeof(char) +
pair.Value.Length * sizeof(int);
}
}
}
"учтите! пример кода что я привел, работает корректно только для int[,]" - извините не понял про какой "кусочек когда" вы говорите в какой то ссылке он был?int[,] и int[][] разные вещи )) могут быть сюрпризы
using System;
using System.Collections.Generic;
namespace size_of_Dictionary
{
class Program
{
static void Main(string[] args)
{
dq();
dp();
}
static void dq() // q - от слова квадратные, все на вскидку, без придирок плз ))
{
var tails = new Dictionary<string, int[,]>();
tails.Add("123456789", new int[,] { { 1, 2, 3 }, { 4, 5, 6 } });
tails.Add("12345", new int[,] { { 1, 2 }, { 3, 4 } });
// 2*4+9*2+6*4+5*2+4*4=8+18+24+10+16=76
long size = tails.Count * 4;
foreach (var pair in tails)
size +=
pair.Key.Length * sizeof(char) +
pair.Value.Length * sizeof(int);
Console.WriteLine(size);
}
static void dp() // p - от слова полиразмерные, зато все корректно, но без внутренностей словаря
{
var tails = new Dictionary<string, int[][]>();
tails.Add("123456789", new int[][] { new int[] { 1, 2, 3, 4 }, new int[] { 5, 6, 7 } });
tails.Add("12345", new int[][] { new int[] { 1, 2, 3 }, new int[] { 4, 5 } });
// 2*4+9*2+7*4+5*2+5*4=8+18+28+10+20=84
long size = tails.Count * 4;
foreach (var pair in tails)
{
size += pair.Key.Length * sizeof(char);
foreach(var arr in pair.Value)
size += arr.Length * sizeof(int);
}
Console.WriteLine(size);
}
}
}