Всем добрый вечер! Учу по не многу C#. Решил накалякать генератор чисел, не буду вдаваться в его суть, а лучше расскажу о загвоздке. Красота эта генерирует порядка 10'000'000'000 чисел, всю эту гадость хотелось бы держать непосредственно в самой программе, перед тем как выводить в файл. Мало того, есть случаи когда это число может увеличится в несколько раз.
Было принято решение запихать всё это безобразие не в list< string > как было раньше, а в list< list < string > >, но существенно, это мало на что повлияло, хотя количество вмещаемых чисел удвоилось (выяснилось экспериментальным путём).
Но всё же при создании более 2х массивов внутри основного вылетает ошибка:
"System.OutOfMemoryException" в mscorlib.dll
Тогда в голову пришла другая идея: сделать массив с указателями на экземпляры класса list< string >. Мне показалось, что тогда раз уж в списке содержаться просто адреса других массивов, а не они сами, то в теории должно всё получиться.
Но данная затея ни к чему не привела, так как работа с указателями в c# существенно отличается от c++ (с него начинал учиться, а в c# с указателями пока не сталкивался).
Прошу совета! Подскажите как сделать массив указателей на list'ы или более разумный метод работы с массивами по 10млрд. чисел в каждом.
Постскриптум
Функции поочерёдно запускаются в отдельном от основного потоке, сначала BuildNumbers, после того как она отработает CreateOperators. Не серчайте на меня из-за, возможно, бредовости затеи, но по не многу разрабатывая такие бесполезные утилиты сталкиваюсь с интересными проблемами как эта и хотелось бы соображать, как такое решить.
Немного кода не помешает:
static public List<string> Numbers { get; set; }
static public List<List<string>> OutputNumbers { get; set; }
static public void BuildNumbers(int NumberLegth, int UpperRange, int BottomRange)
{
Numbers = new List<string>();
for (long i = 0; i < BottomRange; i++)
{
string number = i.ToString();
if (number.Length < NumberLegth)
{
for (int j = number.Length; j < NumberLegth; j++)
{
number = number.Insert(0, "0");
}
}
Numbers.Add(number);
}
}
static public void CreateOperators(List<string> Operators, int CountryCode)
{
OutputNumbers = new List<List<string>>();
string Country = "";
if (CountryCode > 0)
{
Country = DATA.Code[CountryCode].ToString();
}
for (int i = 0; i < Operators.Count; i++)
{
OutputNumbers.Add(new List<string>());
for (int j = 0; j < Numbers.Count; j++)
{
OutputNumbers[i].Add(Numbers[j].Insert(0, Country + Operators[i])); //вот тут и вылазит трабл...
}
}
Numbers.Clear();
}