Я использую Dictionary<Int,Int>
для хранения частоты цветов в изображении, где ключ - это цвет (как int), а значение - количество раз, когда цвет был найден на изображении.
Когда я обрабатываю большие/более красочные изображения, этот словарь становится очень большим. Я получаю исключение из памяти всего около 6 000 000 записей. Является ли это ожидаемой мощностью при работе в 32-битном режиме? Если да, то могу ли я с этим поделать? И какие могут быть альтернативные методы отслеживания этих данных, которые не исчерпываются из памяти?
Для справки, вот код, который проходит через пиксели в растровом изображении и сохраняет частоту в Dictionary<Int,Int>
:
Bitmap b; // = something...
Dictionary<int, int> count = new Dictionary<int, int>();
System.Drawing.Color color;
for (int i = 0; i < b.Width; i++)
{
for (int j = 0; j < b.Height; j++)
{
color = b.GetPixel(i, j);
int colorString = color.ToArgb();
if (!count.Keys.Contains(color.ToArgb()))
{
count.Add(colorString, 0);
}
count[colorString] = count[colorString] + 1;
}
}
Изменить: Если вам интересно, какое изображение имеет в нем много разных цветов: http://allrgb.com/images/mandelbrot.png
Изменить: я также должен упомянуть, что это выполняется внутри веб-приложения asp.net с использованием .Net 4.0. Таким образом, могут быть дополнительные ограничения памяти.
Изменить: я просто запускал один и тот же код в консольном приложении и не имел проблем. Проблема возникает только в ASP.Net.