Come on. I'm loading Buttons in a panel through the BackGroundWorker. That is, inside this BackGround I execute a query in the bank through EF and fill in the panel with the Buttons that contains information coming from this query. The more times the thread rolls, the more memory it allocates. What do I do to prevent this consumption from growing so much?
Here is the BackGroundWorker code
private void WorkCarregaVendas_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
int i = 0;
while (true)
{
Application.DoEvents();
Application.EnableVisualStyles();
this.BeginInvoke(new MethodInvoker(() =>
{
CarregaVendasAtivas();
CarregaMesas();
CarregaDeliverys();
ExecutaPesquisaNumero(txtPesquisaNumero.Text, true);
}));
Thread.Sleep(TimeSpan.FromSeconds(30));
}
}
Here I load the buttons.
private void CarregaMesas()
{
foreach (BotaoOperacional Control in flMesas.Controls)
{
Control.Dispose();
}
flMesas.Controls.Clear();
//Pois se há uma pesquisa não a necessidade de carregar todos .
if (txtPesquisaNumero.Text.Equals(String.Empty))
foreach (var mesaCliente in objListaVendasAtivas.Where(x => x.IdTipoVenda == (int)EnumTipoVenda.Mesa).OrderBy(x => x.NumeroMesa))
{
decimal preco = 0;
using (var insRepositorioMesaProduto = new MesaProdutoRepositorio())
{
preco = insRepositorioMesaProduto.
PesquisaProdutoMesa(mesaCliente.Id).Select(x => x.Produto)
.Sum(x => x.PrecoVenda);
}
var btn = new BotaoOperacional(mesaCliente)
{
AtualizarMenuPrincipal = CarregaMesas,
Aparencia = EnumTipoVenda.Mesa,
NumeroMesa = mesaCliente.NumeroMesa,
Cliente = mesaCliente.Cliente == null ? "" : mesaCliente.Cliente.Descricao,
Preco = preco
};
btn.CarregaBotao();
flMesas.Controls.Add(btn);
}
}