Да, вы используете потоки, но вы теряете одно из преимуществ потоков: не загружать весь ввод и вывод XML сразу в память.
Это прекрасно для очень маленьких XML-документов, но может привести к очень высокому использованию памяти для больших документов.
Решение состоит в том, чтобы избежать StringReader / StringWriter и вместо этого использовать соответствующую реализацию потока в зависимости от того, откуда следует читать и отправлять XML. Например:
- Если вы хотите преобразовать в / из XML-файл, используйте FileStreams.
- Если вы отправляете через сокет / HTTP-соединение, используйте поток, предоставленный вашим объектом соединения.
Кроме того, загрузка XSLT из встроенных строк, как правило, не очень хорошая идея (ее сложнее поддерживать), но я не думаю, что это приведет к проблемам с производительностью (если XSLT действительно не очень большой). Для лучшей управляемости я бы порекомендовал хранить XSLT в другом файле. Файл может быть либо загружен из файловой системы (с помощью FileStream), либо он также может быть сохранен внутри скомпилированного DLL-файла как «встроенный ресурс» и загружен с помощью assembly.GetManifestResourceStream()
.