Небезопасный код и фиксированные операторы с помощью StringBuilder

StackOverflow https://stackoverflow.com/questions/1858878

Вопрос

Мне было интересно, как передать строку или StringBuilder в функцию C, которая выводит строку по параметру.Я нашел отличный ответ в

Вызов неуправляемой функции из C#:мне следует передать StringBuilder или использовать небезопасный код?

Но у меня есть сомнение.Кто-нибудь может объяснить мне, почему сборщик мусора не перемещает (управляемый) экземпляр StringBuilder во время выполнения импортированной функции?

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top