我正在编写一个Windows CE应用程序,我希望在发生某些事情时播放声音(简短的wav文件)。由于这种声音会经常播放,我的第一直觉是将wav文件加载到内存流中并重复使用该流而不是每次都读取该文件。
但后来我发现这些Windows Mobile设备只有一种类型的内存,用于两者用于数据存储(=文件系统)至于程序存储器;控制面板中甚至还有一个很好的滑块,可以用来将内存委托给存储或程序执行。因此,从理论上讲,从文件系统中读取文件(或SQL Server CE数据库中的某些值)应该花费(几乎)与从某个内存中对象读取此值相同的时间,对吗?
这个假设是否正确(即,应用程序级别的内存缓存在这里没有意义)或者我错过了什么?为简单起见,我们假设只使用了设备的内部存储器(没有存储卡)。
答案 0 :(得分:1)
该假设可能有效,也可能无效。它存放在哪里?如果它是持久存储(如存储卡文件夹或硬复位时剩余的任何其他内容),则它由Flash支持,这比RAM慢,并且加载性能会有差异,尽管它可能会产生多大影响你的应用程序我不能说 - 只有测试会告诉你。
答案 1 :(得分:1)
当我想在Windows Mobile上播放简短的WAV文件时(例如通知声音)。我通常将它作为资源添加到我的可执行文件中。 AFAIK资源被加载到RAM中,因为它们是可执行映像的一部分。然后,您可以方便地使用SND_RESOURCE调用PlaySound()(可能还有使用SND_ASYNC的OR,以便在播放文件时调用不会阻止)标记。