Я предполагаю, что эти данные должны быть полностью отправлены клиенту и уже каким-то образом предварительно отфильтрованы, но все же должны быть отправлены обратно человеку, который сделал запрос.
В этом случае вы хотите выполнить эту конкретную операцию «асинхронно». Я не уверен, подходит ли это вашему рабочему процессу, но скажу, что человек запрашивает этот большой документ в формате XML, я бы: а) поставил в очередь другой рабочий поток, чтобы запустить генерацию документа при возврате «токена» (возможно, GUID для заявителя); б) вернуть ссылку на страницу, где запрашивающий может щелкнуть ссылку (передав токен), что позволит странице просмотреть результаты.
Если поток завершил обработку документа, он помещает его в специальную папку с уникальным именем и добавляет токен в таблицу базы данных с указанием местоположения документа. Если пользователь запрашивает эту страницу, токен существует в базе данных, а документ существует в файловой системе, ему разрешается щелкать и загружать его через HTTP. Если он не существует, им либо говорят, что он не существует, либо ждать результатов. (Это сообщение может основываться на времени получения запроса.)
Если человек успешно загрузил документ (и вы можете сделать это с помощью скрипта), вы можете удалить запись для базы данных для документа с этим токеном и удалить файл из файловой системы.
Надеюсь, я правильно прочитал этот вопрос.