DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ボイスチャットプログラムでのメモリリーク

環境/言語:[WindowsXP C#]
分類:[.NET]

はじめまして。


C# + DirectSoundを使用してUDP通信間の音声チャットプログラムを作成しているのですが、
メモリリークが発生してしまいます。

リークしているのは、音声を受信する部分で、

while(true)
{
byte[] data = this.udpClient.Receive(ref remoteEP);
byte[] decoded = new byte[data.Length * 2];

decoded = new byte[data.Length];
decoded = data;
playbackBuffer = new SecondaryBuffer(this.playbackBufferDescription, this.device);

playbackBuffer.Write(0, decoded, LockFlag.None);
playbackBuffer.Play(0, BufferPlayFlags.Default);
}

playbackBufferをwhile内でDisposeすればメモリは上がらないのですが、当然音声が聞こえなくなります。

回避策はありますでしょうか?
2011/07/13(Wed) 22:43:43 編集(投稿者)

■No28764に返信(youichiさんの記事)
> C# + DirectSoundを使用してUDP通信間の音声チャットプログラムを作成しているのですが、
> メモリリークが発生してしまいます。

どうやってそれを調べましたか?
そのループ単位でみたときでなく、数分といったレベルでみたときも永遠に上昇傾向ですか?

> playbackBufferをwhile内でDisposeすればメモリは上がらないのですが、
> 当然音声が聞こえなくなります。

何もケアしなければ、放置された分メモリリークするのは当然では。
一定時間後に Dispose できるような仕組みを作っておくか、直近 5 個分をもっておいてそれからあふれるものは随時 Dispose するとかどうでしょうか。

# Queue とか。

DOBON.NET | プログラミング道 | プログラミング掲示板