Эффективным способом было бы найти, сколько (пессимистически) байтов вам понадобится на символ с
Encoding.GetMaxByteCount(1);
затем делим размер строки на результат, затем конвертируем столько символов с помощью
public virtual int Encoding.GetBytes (
string s,
int charIndex,
int charCount,
byte[] bytes,
int byteIndex
)
Если вы хотите использовать меньше памяти, используйте
Encoding.GetByteCount(string);
но это гораздо более медленный метод.