Небезопасный код и фиксированные операторы с помощью StringBuilder
-
13-09-2019 - |
Вопрос
Мне было интересно, как передать строку или StringBuilder в функцию C, которая выводит строку по параметру.Я нашел отличный ответ в
Но у меня есть сомнение.Кто-нибудь может объяснить мне, почему сборщик мусора не перемещает (управляемый) экземпляр StringBuilder во время выполнения импортированной функции?
Решение
Видеть Маршалинг по умолчанию для строк подробнее о том, как маршалируются строки и StringBuilder при использовании COM и P/Invoke.Там прямо не сказано почему шаблон использования безопасен, но указывает на то, что использование строки и StringBuilder для P/Invoke поддерживается и является предполагаемым поведением.Я подозреваю, что система маршалинга заботится о закреплении буфера на время внешнего вызова, не позволяя сборщику мусора переместить его.