Nic*_*ell 8 c# audio memory-leaks soundplayer
我正在用C#编写一个基本的写作应用程序,我希望程序能够在输入时输出打字机声音.我已经将我的RichTextBox上的KeyPress事件挂钩到一个函数,该函数使用SoundPlayer每次按下一个键时播放一个简短的wav文件,但是我注意到一段时间后我的计算机慢慢爬行并检查我的进程,audiodlg .exe正在使用5 GIGABYTES的RAM.
我正在使用的代码如下:
我将SoundPlayer初始化为程序启动时的全局变量
SoundPlayer sp = new SoundPlayer("typewriter.wav")
Run Code Online (Sandbox Code Playgroud)
然后在KeyPress事件上我只是打电话
sp.Play();
Run Code Online (Sandbox Code Playgroud)
有谁知道导致大量内存使用的原因是什么?该文件不到一秒钟,所以它不应该堵塞太多东西.
不要使用SoundPlayer- waveOut...改为使用API:
http://www.codeproject.com/Articles/4889/A-full-duplex-audio-player-in-C-using-the-waveIn-w
SoundPlayer虽然我确信编写它的MS实习生意味着很好,但它更像是玩具而不是生产就绪组件.:)
更新: 如果您使用链接的示例并熟悉代码,您将看到SoundPlayer实现可能出现的问题.使用这些waveOut...函数播放音频涉及两个内存缓冲区:一个小的用于标头,一个可能大的缓冲区包含实际的样本数据.您链接的修补程序文章提到每次Play调用几百字节的泄漏,这意味着代码可能每次都实例化一个新的标头,然后不正确处理它.(这假设SoundPlayer包装waveOut...API - 我不知道是否是这种情况)
程序员理所当然地认为"不要重新发明轮子".好吧,有时轮子迫切需要重新发明.
| 归档时间: |
|
| 查看次数: |
2998 次 |
| 最近记录: |