У меня есть код:System.OutOfMemoryException при работе с большими списками
this.weights_StoA = new List<List<double>>();
if (NETWORK_MODE == 0)
{
Random rand = new Random();
int count = enters.Count;
Parallel.For(0, HIDDEN_NEURONS_COUNT, (i, loopState) =>
{
List<double> weights = new List<double>();
for (int j = 0; j < count; j++)
{
weights.Add(rand.NextDouble());
}
lock (weights_StoA)
{
weights_StoA.Add(weights);
}
});
}
weights_StoA
является List<List<double>>
.
Я работаю с большими массивами. HIDDEN_NEURONS_COUNT = 63480, entres.Conut = 126960
. Этот код генерирует System.OutOfMemoryException
. Я попытался изменить архитектуру на x64, но она по-прежнему вызывает одно и то же исключение.
Как это исправить? Буду очень признателен, если вы поможете мне решить эту проблему!
Sidenote: 'Random' не поточно- – Caramiriel
Ваш алгоритм выделит' 63,480 * 126,960' (это '8,059,420,800' экземпляров) из' double' (8 байт) значения, это '64,475,366,400' байты или ** 60 гигабайт **. Неудивительно, что у вас заканчивается память. – Dai
Вопрос в том, что вы делаете с этим списком. Вы должны работать не со списками, а с перечнем и шаблоном проектирования производителя/потребителя, чтобы сборщик мусора мог исключить использование данных. –