private static void resetEntity(ref BancoMaquina1 maquina1, ref BancoMaquina2 maquina2) { maquina1.Dispose(); maquina2.Dispose(); maquina1 = null; maquina2 = null; GC.Collect(); maquina1 = new BancoMaquina1(); maquina2 = new BancoMaquina2(); }
private static void realizaTestes(List <IMDB> dados, string cenario) { for (int i = 0; i < iteracoesMaximo; i++) { //cada entity framework é iniciado uma vez por iteração para evitar o uso de cache // inicia o contexto do entity framework para salvar as estatisicas em banco BancoEstatistica estatisticas = new BancoEstatistica(); //inicia o contexto do entity dos nós BancoMaquina1 maquina1 = new BancoMaquina1(); BancoMaquina2 maquina2 = new BancoMaquina2(); Console.Write($"{cenario} -> "); Console.Write($"Iteração {i}: "); desligaMaquina2(cenario); //insert Console.Write("Inserindo ..."); DateTime tempoINSERTInicial = DateTime.Now; { maquina1.imdb.AddRange(dados); maquina1.SaveChanges(); } DateTime tempoINSERTFinal = DateTime.Now; Estatisica insert = new Estatisica { horarioInicio = tempoINSERTInicial, horarioFim = tempoINSERTFinal, iteracao = i, setup = cenario, tipo = "INSERT" }; estatisticas.Add(insert); estatisticas.SaveChanges(); Console.Write("Inseridos! - "); //replicação - aguarda até que no nó 2 tenha a mesma quantidade de tuplas inseridas no nó 1 if (cenario == "Posgresql-DBR - 2 nó" || cenario == "Posgresql-DBR - 2 nó - sendo 1 com defeito intermitente") { Console.Write("Replicando ..."); ligaMaquina2(cenario); DateTime tempoREPLICACAOInicial = DateTime.Now; int totalTuplasMaquina1 = dados.Count; int quantTuplasMaquina2 = 0; while (quantTuplasMaquina2 != totalTuplasMaquina1) { quantTuplasMaquina2 = maquina2.imdb.Count(); } DateTime tempoREPLICACAOFinal = DateTime.Now; Estatisica replicacao = new Estatisica { horarioInicio = tempoREPLICACAOInicial, horarioFim = tempoREPLICACAOFinal, iteracao = i, setup = cenario, tipo = "REPLICACAO" }; estatisticas.Add(replicacao); estatisticas.SaveChanges(); Console.Write("Replicado! - "); } //realiza o reset dos entities pois acabou de ser feito um insert, então os dados ainda estão em memoria. resetEntity(ref maquina1, ref maquina2); //select Console.Write("Select ..."); DateTime tempoSELECTInicial = DateTime.Now; var execucaoSelect = maquina1.imdb.ToList(); DateTime tempoSELECTFinal = DateTime.Now; Estatisica select = new Estatisica { horarioInicio = tempoSELECTInicial, horarioFim = tempoSELECTFinal, iteracao = i, setup = cenario, tipo = "SELECT" }; estatisticas.Add(select); estatisticas.SaveChanges(); Console.Write("Select! - "); //update Console.Write("Atualizando ..."); DateTime tempoUPDATEInicial = DateTime.Now; { maquina1.imdb.UpdateRange(execucaoSelect); maquina1.SaveChanges(); } DateTime tempoUPDATEFinal = DateTime.Now; Estatisica update = new Estatisica { horarioInicio = tempoUPDATEInicial, horarioFim = tempoUPDATEFinal, iteracao = i, setup = cenario, tipo = "UPDATE" }; estatisticas.Add(update); estatisticas.SaveChanges(); Console.Write("Atualizado! - "); //deletes Console.Write("Removendo ..."); DateTime tempoDELETEInicial = DateTime.Now; { maquina1.imdb.RemoveRange(execucaoSelect); maquina1.SaveChanges(); } DateTime tempoDELETEFinal = DateTime.Now; Estatisica delete = new Estatisica { horarioInicio = tempoDELETEInicial, horarioFim = tempoDELETEFinal, iteracao = i, setup = cenario, tipo = "DELETE" }; estatisticas.Add(delete); estatisticas.SaveChanges(); Console.WriteLine("Removidos! - "); //força a limpesa de possiveis caches do entity framework entre as iterações resetEntity(ref maquina1, ref maquina2); } GC.Collect(); }