WPF Noobie здесь. Я делаю приложение для лотереи, перечислил все комбинации (около 8 миллионов) в таблице данных. Код работает, но он занимает слишком много времени и особенно памяти (около 3 ГБ оперативной памяти).
Проблема заключается в создании новой DataRow. Пытался поставить его перед циклом for и получил ошибку «Row уже к этой таблице». Пытался поместить его в формате и получил ошибку «Он не реализует IDisposable».
Исходя из разработки Android, там у нас есть Recycle View. и нет проблем. Так как я могу решить это эффективно? Должен ли я использовать Dispose, установить null (установка null в строке после того, как я использую его, таблица станет пустой), заранее использовать ObservableCollection?
Thx.
DataTable dtLotoSix = new DataTable();
dtLotoSix.Columns.Add("Prvi");
dtLotoSix.Columns.Add("Drugi");
dtLotoSix.Columns.Add("Treci");
dtLotoSix.Columns.Add("Cetvrti");
dtLotoSix.Columns.Add("Peti");
dtLotoSix.Columns.Add("Sesti");
int broojkom = 0;
LOTO6od45 trenutnaKombinacija = new LOTO6od45();
aktivnaLista = new List<LOTO6od45>();
for(int i = 1; i < 41; i++)
{
for(int j = i + 1; j < 42; j++)
{
for (int k = j + 1; k < 43; k++)
{
for (int x = k + 1; x < 44; x++)
{
for (int y = x + 1; y < 45; y++)
{
for (int z = y + 1; z < 46; z++)
{
broojkom++;
trenutnaKombinacija.Prvi = i;
trenutnaKombinacija.Drugi = j;
trenutnaKombinacija.Treci = k;
trenutnaKombinacija.Cetvrti = x;
trenutnaKombinacija.Peti = y;
trenutnaKombinacija.Sesti = z;
aktivnaLista.Add(trenutnaKombinacija);
DataRow row = dtLotoSix.NewRow(); //THIS TAKES RAM
row["Prvi"] = trenutnaKombinacija.Prvi;
row["Drugi"] = trenutnaKombinacija.Drugi;
row["Treci"] = trenutnaKombinacija.Treci;
row["Cetvrti"] = trenutnaKombinacija.Cetvrti;
row["Peti"] = trenutnaKombinacija.Peti;
row["Sesti"] = trenutnaKombinacija.Sesti;
dtLotoSix.Rows.Add(row);
}
}
}
}
}
}
zaprooovjeru.Text = System.Convert.ToString(broojkom);
prikazikombinacije.ItemsSource = dtLotoSix.DefaultView;