См. Маршалинг по умолчанию для строк для получения подробной информации о том, как строка и StringBuilder маршалируются при использовании COM и P / Invoke. В нем явно не указано , почему шаблон использования безопасен, но указывается, что использование строки и StringBuilder для P / Invoke поддерживается и предполагает поведение. Я подозреваю, что система сортировки позаботится о закреплении буфера на время внешнего вызова, предотвращая его перемещение GC.