アンマネージドコードにCallbackを指定したらCallbackOnCollectedDelegateが頻発する

なんとなくPortAudioSharpを使わずに、自分でDllImportとか書いてPortAudioを使ってみている。そしたら、少し動かしているだけでCallbackOnCollectedDelegateが頻発して、少しはまってしまった。

原因はcallbackOnCollectedDelegate MDAに書いてある通り、アンマネージド側に渡しているDelegateがGCに回収されてしまうこと。解決策としては、c# - CallbackOnCollectedDelegate was detected on Walther MFS100 Check Scanner - Stack Overflowのように、Delegateのインスタンスをフィールド等の生存期間が長いことが明らかな変数に束縛してしまうのが正解なようだ。

アンマネージドコードを弄ってきてたことがある人には常識な話っぽいですが、自分はあまり経験がないので知らなかった。