У меня есть код, который просто умирает на своей задачи (интерфейс ложиться на минут 10) при обработки +- 3500 строк данных. В голову пришла идея сделать асинхронность выполнения это работы. Проблема в том, что я не особо разобрался как использовать асинхронность в таких примерах как у меня!
код С#:
async void Button7Click(object sender, EventArgs e)
{
try
{
textBox1.Text = "1";
dataGridView2.SelectAll();
dataGridView2.ClearSelection();
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
if (this.dataGridView2.CurrentRow != null)
{
dataGridView2.Rows.Add();
this.dataGridView2.Rows[i].Cells[0].Value = Convert.ToDouble((Convert.ToDouble(dataGridView1[2, i].Value) - Convert.ToDouble(dataGridView1[2, 0].Value)) * Convert.ToDouble(textBox1.Text));
this.dataGridView2.Rows[i].Cells[1].Value += string.Format("{0:0.#############}", Convert.ToDouble((Convert.ToDouble(dataGridView1[7, i].Value) - Convert.ToDouble(dataGridView1[7, 0].Value)) / 78));
this.dataGridView2.Rows[i].Cells[2].Value += string.Format("{0:0.########}", Convert.ToDouble((Convert.ToDouble(dataGridView1[12, i].Value) - Convert.ToDouble(dataGridView1[12, 0].Value)) / Convert.ToDouble((Convert.ToDouble(dataGridView1[15, 0].Value) - Convert.ToDouble(dataGridView1[12, 0].Value))))) + Environment.NewLine;
this.dataGridView2.Rows[i].Cells[3].Value += string.Format("{0:0.###}", Convert.ToDouble((Convert.ToDouble(dataGridView1[31, i].Value) / 3) + Convert.ToDouble((Convert.ToDouble(dataGridView1[15, i].Value) - Convert.ToDouble(dataGridView1[12, i].Value))))) + Environment.NewLine;
this.dataGridView2.Rows[i].Cells[4].Value = Convert.ToDouble((Convert.ToDouble(dataGridView1[31, i].Value) / 2)) + Environment.NewLine;
this.dataGridView2.Rows[i].Cells[5].Value += string.Format("{0:0.#####}", Convert.ToDouble((Convert.ToDouble(dataGridView1[31, i].Value) / 3) + Convert.ToDouble((Convert.ToDouble(dataGridView1[15, i].Value) - Convert.ToDouble(dataGridView1[12, i].Value)) * 3))) + Environment.NewLine;
}
else
{
i--;
dataGridView2.Rows.RemoveAt(i);
GC.Collect();
GC.WaitForPendingFinalizers();
return;
}
}
}
catch (Exception e2)
{
//Обрабатываете Exception - пишите в лог или выводите e.Message на панель
MessageBox.Show(e2.Message);
}
}
В datagridview1 хранятся цифры (double), которые используются в расчётах
В datagridview2 ответы которые прошли в расчётах
spoilerБыло бы идеально, если кто-то помог мне с этим кодом + правильно поставил collect и прочие детали которые очищают мусор, ибо после такого расчёта у меня забит пк кешом почти в 1000мб
Но если, есть другой какой-то способ ускорить этот процесс, то пишите.