小编kom*_*iga的帖子

Javascript强制GC集合?/强制释放对象?

我有一个js函数,可以使用Audio接口播放任何给定的声音(为每个调用创建一个新实例).

这很有效,直到大约第32次通话(有时更少).此问题与Audio实例的发布直接相关.我知道这是因为我允许时间让Chromium中的GC运行,它将允许我再次播放32个左右的声音.

这是我正在做的一个例子:

<html><head>
<script type="text/javascript">
function playSound(url) {
    var snd = new Audio(url);
    snd.play();
    snd = null;
}
</script>
</head>

<body>
<a href="#" onclick="playSound('blah.mp3');">Play sound</a>
</body></html>
Run Code Online (Sandbox Code Playgroud)

我也有这个,适用于少于32个playSound调用的页面:

var AudioPlayer = {
    cache: {},
    play: function(url) {
        if (!AudioPlayer.cache[url])
            AudioPlayer.cache[url] = new Audio(url);
        AudioPlayer.cache[url].play();
    }
};
Run Code Online (Sandbox Code Playgroud)

但是这对我想做的事情不起作用(用其他内容(来自单独的文件)动态替换div,它们上面有更多的声音 - 1.内存使用量很容易飙升,2.许多声音永远不会播放).

我需要一种立即释放声音的方法.是否有可能做到这一点?我没有找到音频接口的免费/关闭/卸载方法.

页面将在本地查看,因此声音的恒定加载根本不是一个重要因素(大多数声音都很短).

javascript garbage-collection

25
推荐指数
2
解决办法
4万
查看次数

要求函数模板的返回类型为模板的特化

我已经在stackoverflow上讨论了一段时间,但要么我不理解模板足以找到解决方案,要么它之前没有得到解答.

在这个例子中:

template <typename T> T f();
Run Code Online (Sandbox Code Playgroud)

是否有可能使函数需要类型T成为std::basic_string模板的特化?

我可以将模板定义为T作为as的类型std::basic_string(std::basic_string<T>当然在内部使用):

template <typename T> std::basic_string<T> f();
Run Code Online (Sandbox Code Playgroud)

但后来我将无法通过std::stringstd::wstring给函数(预计返回类型为std::stringstd::wstring,分别),这是这里的真实目的(将能够通过任何类型从派生std::basic_string模板).

c++ gcc

1
推荐指数
2
解决办法
1162
查看次数

标签 统计

c++ ×1

garbage-collection ×1

gcc ×1

javascript ×1