Usuário com melhor resposta
[RESOLVIDO] Programa chamado não finaliza o processo

Pergunta
-
Olá amigos,
Tenho uma aplicação web que chama um aplicativo executável no servidor passando alguns parâmetros, e esse aplicativo devolve um arquivo em PDF para o usuário.
Funciona perfeitamente, porém estou com um problema que não consigo resolver.
Algumas vezes, não sei dizer quando ocorre, quando o usuário faz a solicitação do arquivo e a aplicação chama esse aplicativo, o mesmo não mata o processo do aplicativo. O processo continua na aba de processos do task manager do servidor.Não é sempre que isso acontece, só algumas vezes ao dia. Mas isso não é bom, pois diminui a performance do servidor.
Podem me ajudar a resolver essa situação ou me auxiliar no motivo do processo da aplicação não fechar após o uso?
Obrigado!
Cleverson Darsie
- Editado Cleverson Darsie terça-feira, 29 de outubro de 2013 13:34 Finalizado
Respostas
-
Olá Romy,
Não precisei implementar o GC para conseguir a resolução do problema.
Apenas inseri o trecho do código abaixo para resolver:
using (Process exeProcess = Process.Start(startInfo)) { exeProcess.WaitForExit(); if (File.Exists(pag.Server.MapPath(res))) { pag.Response.ContentType = "application / pdf"; pag.Response.AddHeader("content-disposition", "attachment;filename=" + filename); FileStream sourceFile = new FileStream(pag.Server.MapPath(res), FileMode.Open); long FileSize; FileSize = sourceFile.Length; byte[] getContent = new byte[(int)FileSize]; sourceFile.Read(getContent, 0, (int)sourceFile.Length); sourceFile.Close(); pag.Response.BinaryWrite(getContent); if (!exeProcess.HasExited) { exeProcess.Kill(); } } }
Agora não fica nenhum processo aberto no servidor.
Obrigado pela ajuda.
Cleverson Darsie
- Marcado como Resposta Cleverson Darsie terça-feira, 29 de outubro de 2013 13:34
Todas as Respostas
-
Cleverson,
Minha dica para você é usar um bloco de código do tipo "Using", pois ele libera recursos automaticamente através do método Dispose().
Para maior entendimento segue em anexo o link abaixo:
http://www.devmedia.com.br/entendendo-o-bloco-using-no-c/16967
Espero ter ajudado, Bons Estudos !
Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.
- Sugerido como Resposta Jean Carlos Galhardi quinta-feira, 24 de outubro de 2013 23:55
- Não Sugerido como Resposta Cleverson Darsie segunda-feira, 28 de outubro de 2013 12:04
-
Olá Jean Carlos,
Eu já utilizo o bloco using no meu código, como você pode ver abaixo:
using (Process exeProcess = Process.Start(startInfo)) { exeProcess.WaitForExit(); if (File.Exists(pag.Server.MapPath(res))) { pag.Response.ContentType = "application / pdf"; pag.Response.AddHeader("content-disposition", "attachment;filename=" + filename); FileStream sourceFile = new FileStream(pag.Server.MapPath(res), FileMode.Open); long FileSize; FileSize = sourceFile.Length; byte[] getContent = new byte[(int)FileSize]; sourceFile.Read(getContent, 0, (int)sourceFile.Length); sourceFile.Close(); pag.Response.BinaryWrite(getContent); } else { throw new Exception("DLRB não retornou arquivo de resultado."); } }
Acredito que não seja esse o problema. De uma analisada, por favor, e me diga se há alguma outra coisa que posso fazer.
Obrigado.
Cleverson Darsie
-
Cara já experimentou a class GC.
public class produtosController : Controller , IDisposable { #region Implementação do IDisposable //Implement IDisposable. public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { } ~produtosController() { Dispose(false); } public class Derived : EmbaixadorasController { protected override void Dispose(bool disposing) { base.Dispose(disposing); } } #endregion }
Abraço!
-
Olá Romy,
Não precisei implementar o GC para conseguir a resolução do problema.
Apenas inseri o trecho do código abaixo para resolver:
using (Process exeProcess = Process.Start(startInfo)) { exeProcess.WaitForExit(); if (File.Exists(pag.Server.MapPath(res))) { pag.Response.ContentType = "application / pdf"; pag.Response.AddHeader("content-disposition", "attachment;filename=" + filename); FileStream sourceFile = new FileStream(pag.Server.MapPath(res), FileMode.Open); long FileSize; FileSize = sourceFile.Length; byte[] getContent = new byte[(int)FileSize]; sourceFile.Read(getContent, 0, (int)sourceFile.Length); sourceFile.Close(); pag.Response.BinaryWrite(getContent); if (!exeProcess.HasExited) { exeProcess.Kill(); } } }
Agora não fica nenhum processo aberto no servidor.
Obrigado pela ajuda.
Cleverson Darsie
- Marcado como Resposta Cleverson Darsie terça-feira, 29 de outubro de 2013 13:34