パラメータで文字列を出力するC関数にStringまたはStringBuilderを渡す方法について疑問に思っていました。私は素晴らしい答えを見つけました
C# からアンマネージ関数を呼び出す: StringBuilder を渡すか、安全でないコードを使用する必要がありますか?
しかし、私には疑問があります。インポートされた関数の実行中にガベージ コレクターが (マネージド) StringBuilder インスタンスを再配置しない理由を誰でも説明できますか?
パラメータで文字列を出力するC関数にStringまたはStringBuilderを渡す方法について疑問に思っていました。私は素晴らしい答えを見つけました
C# からアンマネージ関数を呼び出す: StringBuilder を渡すか、安全でないコードを使用する必要がありますか?
しかし、私には疑問があります。インポートされた関数の実行中にガベージ コレクターが (マネージド) StringBuilder インスタンスを再配置しない理由を誰でも説明できますか?
COM および P/Invoke を使用する場合の文字列と StringBuilder のマーシャリング方法の詳細については、文字列の既定のマーシャリングを参照してください。使用パターンが安全である理由を明示的に述べているわけではありませんが、P/Invoke に文字列と StringBuilder を使用することがサポートされており、意図した動作であることを示しています。外部呼び出しの間、マーシャリング システムがバッファをピン留めし、GC がバッファを再配置するのを防いでいると思われます。