У меня была эта проблема.
Я написал приложение .Net, которое выполняло эмуляцию нажатия клавиш в других приложениях. Я оставляю его включенным всю ночь, надеясь, что к утру он выполнит всю мою работу. Это только что ушло. Он записывал журнал каждый раз, когда входил и выходил из рутины, чтобы я мог точно видеть, что он сделал. Ничего, без исключений. Просто работа работа работа работа работа. А потом, Ничего.
Оказывается, это потому, что я использовал кучу вызовов API и очень часто вызывал их. Это приводило к некоторой утечке памяти, предположительно в рабочей области моего приложения.
<dirtyhack>
Я решил это, написав другое .Net приложение (приложение 2), которое запустило аварийное приложение (приложение 1). После столь долгого времени приложение 1 завершает свою работу, а приложение оболочки 2 - непосредственно перед этим. Приложение 2 затем запустит приложение 1 обратно.
</dirtyhack>
и так далее, и так далее, пока вся работа не будет выполнена! Грязный и разочаровывающий, но в итоге работал довольно красиво :) Я уверен, что есть гораздо лучший способ сделать это. Я, вероятно, не маршалировал свои вызовы COM API должным образом или что-то еще
Но, похоже, что завершение работы приложения и его перезапуск освобождают память (вместе с утечками) и позволяют запустить ее заново.
Возможно, бесполезно в твоих обстоятельствах, но это моя история. Аминь.