Эта конкретная проблема сводит меня с ума. Интересно, сталкивался ли кто-нибудь с подобной проблемой. Если я загружаю рабочий процесс, затем выгружаю его и выполняю снимок памяти, результат будет предсказуемым - моего рабочего процесса больше нет в памяти. Однако, если я загружаю рабочий процесс и устанавливаю действие PersistableIdle равным PersistableIdleAction.Unload и позволяю рабочему процессу простаивать, рабочий процесс остается в памяти, даже если запускается действие Unload.
Я использовал ANTS Memory Profiler для устранения этой проблемы. Это выведенный график сохранения объектов, показывающий, что внутренний объект висит на моем экземпляре рабочего процесса.
альтернативный текст http://www.rohland.co.za/wp-content/uploads/2010/04/Workflow_retention_graph.png
Может кто-нибудь еще проверить эту проблему? Мой код соответствует следующему:
- Создание SqlWorkflowInstanceStore и настройка дескриптора владельца блокировки
- в этот момент я делаю снимок памяти
- Создание экземпляра Workflow1
- Установить действие PersistableIdle
- Применение хранилища экземпляров к Workflow1
- Настройка обработчиков событий действий для Idle, Unload, UnhandledException и т. Д.
- Сохранить экземпляр рабочего процесса
- Запустить экземпляр рабочего процесса
- Ожидание, например, в режиме ожидания (вызвано активностью задержки)
- Убедитесь, что действие Unload запущено
- В этот момент я делаю второй снимок памяти
Из приведенного выше изображения ясно, что единственный объект, ссылающийся на Workflow1, - это результат некоторых внутренних обработчиков событий, которыми я не могу распоряжаться.
Есть какие-нибудь подсказки?