Есть три момента, когда вы выполняете большие операции без необходимости:
- Получение байтов потока
- Преобразование его в Base64
- Запись его в XmlWriter.
Вместо.Первый звонок Length
и GetBuffer
.Это позволяет вам работать с буфером потока напрямую.(Но сначала очистите его).
Затем внедрите base-64 самостоятельно.Это относительно просто, так как вы берете группы по 3 байта, делаете небольшую перестановку, чтобы получить индекс в символ, в который он будет преобразован, и затем выводите этот символ.В самом конце вы добавляете несколько символов =
в зависимости от того, сколько байтов было отправлено в последнем блоке (=
для одного оставшегося байта, ==
для двух оставшихся байтов и ни одного, если не было частичных блоков).
Выполните эту запись в буфер символов (символ []).Самый эффективный размер - это вопрос для экспериментов, но я бы начал с 2048 символов.После того, как вы заполнили буфер, вызовите XmlWriter.WriteRaw
для него, а затем снова начните писать обратно с индексом 0.
Таким образом, вы делаете меньше выделений, и вы начинаете на выходе изв тот момент, когда вы загрузили свое изображение в поток памяти.Как правило, это должно повысить пропускную способность.