Консольное приложение C# все еще находится в памяти после выхода
-
03-07-2019 - |
Вопрос
У меня есть консольное приложение .net C# (не служба).он в основном подключается к веб-сервису, получает несколько файлов XML, копирует эти файлы в несколько мест на дисках, проверяет XML, обрабатывает его и отправляет эти объекты в другой веб-сервис.
Однако, когда основной метод существует (и окно консоли закрывается), я все равно вижу процесс в диспетчере задач.
Я попытался окружить все в основном методе попыткой поймать исключение ApplicationException, но так и не понял, почему приложение выходит из строя, хотя в остальном все работает гладко...
Кто-нибудь знает, с чего начать проверку неисправной детали?
Решение
Посмотрите на использование потоков и асинхронные вызовы.
Другие советы
Если окно консоли закрылось, кажется очень странным, что процесс все еще выполняется.Можете ли вы подключиться к нему в отладчике Visual Studio?(Очевидно, это отладочная сборка.)
Вы уверены, что это не предыдущий запуск, который все еще выполняется?
Если вы отлаживаете приложение, я видел ситуацию, когда Visual Studio создает хост-exe с именем, похожим на ваше приложение, с .vshost.exe в конце.Он использует этот контроль над вашим приложением для более удобной отладки.Этот хост-исполняемый файл остается после того, как вы завершили отладку вашей программы, чтобы он ждал и был готов, чтобы можно было быстро начать новый сеанс отладки.
Вы уверены, что это не этот exe висит?
Если вы запустите приложение без отладки, оно все равно будет зависать?
В вашем приложении почти наверняка есть незавершенный поток.Как сказал Джон, подключите отладчик и посмотрите, какие потоки живы.
Поскольку все остальные ответы предполагают, что у вас, вероятно, есть затяжной поток, но он не обязательно создан вами явно, вам может потребоваться вызвать Dispose или что-то подобное для одного или нескольких ваших объектов.