DOBON.NETプログラミング掲示板過去ログ
ボイスチャットプログラムでのメモリリーク
題名: ボイスチャットプログラムでのメモリリーク
著者: youichi
日時: 2011/07/13 21:13:05
ID: 28764
この記事の返信元:
(なし)
この記事への返信:
[28765]
Re[1]: ボイスチャットプログラムでのメモリリーク
Azulean
2011/07/13 22:43:25
ツリーを表示
環境/言語:[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すればメモリは上がらないのですが、当然音声が聞こえなくなります。
回避策はありますでしょうか?
題名: Re[1]: ボイスチャットプログラムでのメモリリーク
著者: Azulean
日時: 2011/07/13 22:43:25
ID: 28765
この記事の返信元:
[28764]
ボイスチャットプログラムでのメモリリーク
youichi
2011/07/13 21:13:05
この記事への返信:
(なし)
ツリーを表示
2011/07/13(Wed) 22:43:43 編集(投稿者)
■No28764に返信(youichiさんの記事)
> C# + DirectSoundを使用してUDP通信間の音声チャットプログラムを作成しているのですが、
> メモリリークが発生してしまいます。
どうやってそれを調べましたか?
そのループ単位でみたときでなく、数分といったレベルでみたときも永遠に上昇傾向ですか?
> playbackBufferをwhile内でDisposeすればメモリは上がらないのですが、
> 当然音声が聞こえなくなります。
何もケアしなければ、放置された分メモリリークするのは当然では。
一定時間後に Dispose できるような仕組みを作っておくか、直近 5 個分をもっておいてそれからあふれるものは随時 Dispose するとかどうでしょうか。
# Queue とか。
DOBON.NET
|
プログラミング道
|
プログラミング掲示板
分類:[.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すればメモリは上がらないのですが、当然音声が聞こえなくなります。
回避策はありますでしょうか?