Небезопасный код и фиксированные операторы с StringBuilder - PullRequest
0 голосов
/ 07 декабря 2009

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

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

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

1 Ответ

1 голос
/ 07 декабря 2009

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

...