Aumentar Performance da Aplicação

7 respostas
blackstile

Tenho uma aplicação que preciso dar uma melhorada na sua peformance, ela não foi criada por mim, mas analisando o codigo vi ela tem um HashMap de BufferedWriter, que na aplicação em produção pode chegar a 6 milhões de BufferedWriter, gostaria de saber isso pode ser um dos motivos do impacto da lentidao da aplicação.
Abaixo segue um trechko do codigo

final HashMap<String, BufferedWriter> fwh = new HashMap<String, BufferedWriter>();
//*********************************************************************
//				<CODIGO OMITIDIO>
//*********************************************************************
				while (rs.next())
				{
					fw = getFileWriter(fwh, now, cfg, splitter, rs); //codigo  deste metodo mostrado abaixo

					final StringBuilder sb = new StringBuilder();

					for (i = 1; i <= columns; i++)
					{
						colummValue = rs.getString(i);						

						if (colummValue == null || colummValue.toLowerCase().equals("null")) {
							colummValue = "";

						}
						sb.append(colummValue);
						sb.append(separator);
					}

					sb.setLength(sb.length() - 1);

					final String line = sb.toString();

					fw.write(line);
					fw.newLine();
				}

Metodo do getSplitterFileWriter

protected BufferedWriter getFileWriter(
			final HashMap<String, BufferedWriter> fwh, final Calendar now,
			final ReceiverConfiguration cfg, final String splitter,
			final ResultSet rs) throws IOException, SQLException
			{
		String fn = null;
//*************************************************************************
//                        <codigo omitido>
//*************************************************************************

		BufferedWriter fw = fwh.get(fn);

		if (fw == null)
		{
			final boolean exportMeta = cfg.getExporterFileMeta(this);

			fw = new BufferedWriter(new FileWriter(fn));

			logger.info("Exporter opening [" + fn + "](metadata=" + exportMeta
					+ ")");

			if (exportMeta)
			{
				final ResultSetMetaData meta = rs.getMetaData();
				final StringBuilder sb = new StringBuilder();
//*********************************************************************
//				<CODIGO OMITIDIO>
//*********************************************************************
				fw.write(sb.toString());
				fw.newLine();
			}

			fwh.put(fn, fw);
			return fw;
		}

		return fw;
			}

7 Respostas

AntonioDiego

kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk

B

Mesmo em uma máquina Linux, duvido que você consiga deixar 6 milhões de arquivos em disco abertos ao mesmo tempo. Tem certeza que o número não é 6.000?

blackstile

Cara entao realmente sao 6 milhoes de dados, mas depois dando uma analisada no codigo vi que ele concatena antes uma clausura where, que de qualquer forma retorna cerca de 50 mil registro…kkkkkk

Tipo o cara pega uma query sem clausula where de um arquivo properties e depois adiciona o where no meio do caminho.

Mas a questao eh o seguinte ele processa 6 milhoes de 50 em 50 mil …kkkkk ou seja ele eh chamado 120 vezes, é um processo que roda apenas uma vez por dia,

Só pra vc entender a loucura eh uma aplicacao perl que interage com uma aplicacao php e esse mesmo perl faz uma interacao com o java.

A coisa eh loca

fabiofalci

Veja vc mesmo se é isso ou não:
http://profiler.netbeans.org/

blackstile

fabiofalci:
Veja vc mesmo se é isso ou não:
http://profiler.netbeans.org/

Valew cara eu vou dar uma analisada eu baixei o plugin para eclipse, e vou testar.
Eu já havia ouvido sobre profiling em uma palestra a algum tempo atras.

Brigadao pela dica

ViniGodoy
blackstile

Cara valew mesmo vivendo e aprendendo, vou proucurar seguir os conselhos dados no post citado

Criado 9 de maio de 2012
Ultima resposta 10 de mai. de 2012
Respostas 7
Participantes 5