小编mar*_*ark的帖子

尝试协助JavaScript垃圾收集器是否有意义?

由于我更像是使用高级面向对象语言的JavaScript,我发现自己就像C/C++程序员一样,在我完成对象时就是这样.我知道GC最终会运行并清理我的烂摊子,但我能做些什么才能真正帮助它?

例如,我有一个大型/复杂主要对象的数组......每个主要对象可能包含数组和其他辅助对象引用.如果我已完成主要对象并将其从数组中删除,那么GC可能最终会找出对象所指向的所有其他内容,循环内部引用和所有内容.但是当从存储阵列中删除主要对象以通过它并且array.length = 0时,任何数组和reference = null任何对象基本上都可以使GC工作变得更容易(例如显式删除引用意味着GC更少)跟踪)?如果你愿意,那种手动析构函数.这样做是值得的还是我浪费时间/精力来获得很少/没有收获?

我想这更像是GC问题的一般理论(Java等),但我对这个问题的目的主要是对JavaScript感兴趣.

谢谢!

javascript garbage-collection

17
推荐指数
2
解决办法
316
查看次数

在iOS Safari上播放WAV文件

我很难将HTML页面上的WAV文件作为HTML5音频标签或通过移动Safari(iPad/iPhone)中的常规可下载链接播放:

<audio controls src="audio-pcm_s16le-8k.wav"/></audio>
<a href="audio-pcm_s16le-8k.wav">audio</a>
Run Code Online (Sandbox Code Playgroud)

HTML5 audio对象只显示Cannot play audio file在其中,当我点击下载引用的锚时,我得到一个黑色的页面,中间有一个"无法播放这个圆圈".我尝试了各种频率(8000,11025,16000,32000,44100),各种编码(mu-law,线性签名16位LE和BE),各种容器(.wav,.caf,.aiff),以及各种频率音频转换程序(Audacity,ffmpeg,以及Apple自己的转换)...我无法播放音频(除非我制作MP3 - 不,我不能只使用MP3或AAC,我需要一个"原始音频" "格式原因太长,无法进入这里".

我查看了iOS支持的格式,它似乎支持WAV ......任何人都有这方面的经验吗?我在最新的iOS 6.0.1上

编辑:选定的回答者让我解决了这个问题,但原因在于答案的评论.底线是它需要HTML范围标题来播放文件.

html safari html5 mobile-safari ios

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

Windows Volume Mixer图标大小太大

在Windows Volume Mixer中,当您的应用程序播放声音时,它会添加应用程序的图标和自定义音量滑块,以调整特定于该应用程序的音量......很好!但是,当您为应用程序使用大尺寸图标时(当Windows缩放任务栏的图标等时,在高DPI中尤为重要),Volume Mixer中的图标无法正确缩放.具体来说,以下代码是我用来设置应用程序图标的代码:

// set icons the normal way
cWnd.SetIcon( theApp.LoadIcon( res_id ), FALSE );
cWnd.SetIcon( theApp.LoadIcon( res_id ), TRUE );

// set hi-res if available
OSVERSIONINFO osv;
osv.dwOSVersionInfoSize = sizeof( osv );
if ( GetVersionEx( &osv ) ) {
    // if we're Vista or more recent, use hi-def icons
    if ( osv.dwMajorVersion >= 6 ) {
        HICON hIcon = (HICON)::LoadImage( theApp.m_hInstance, MAKEINTRESOURCE( res_id ), IMAGE_ICON, 256, 256, LR_SHARED );
        if ( hIcon ) {
            cWnd.SetIcon( hIcon, TRUE ); …
Run Code Online (Sandbox Code Playgroud)

windows winapi icons mfc

10
推荐指数
1
解决办法
1813
查看次数

在创建WebRTC PeerConnection时,我可以跳过ICE(STUN/TURN)发现过程吗?

在我的设置中,我在云中处理音频和视频的自定义服务器,所以我不需要(也不要)整个"我在哪里以及我的私人和公共地址等等".发现过程.基本上我想要SDP提供,而不关心IP地址/端口; 该提议进入服务器,服务器选择编解码器并获取SRTP密钥,并回复浏览器的SDP应答,其中包含公共地址,编解码器选择及其密钥.理想情况下,浏览器开始向服务器发送媒体,服务器只是将"对等"媒体发送回来(它将通过任何UDP友好的NAT设备进行隧道传输).

我知道这在技术上是可行的,因为我已经使用Win32/OSX桌面客户端做到这一点......问题是,这可能与WebRTC和RTCPeerConnection?我已经尝试了一些配置类型,例如{},{ "iceServers": [] }但它似乎仍然通过发现回转.是否有其他方法可以简化流程?谢谢!

webrtc

8
推荐指数
1
解决办法
5316
查看次数

没有宏的更快的常量字符串追加

因此,在组合字符串时,通常会有常量组件,例如:

std::string s;
s += initial_string;
s += "const string";
s += terminating_string;
Run Code Online (Sandbox Code Playgroud)

这只是一个演示,字符串操作可能会更加复杂和深入.因此,在执行const部分时,实现最终"不知道"长度并有效地执行strlen()它.显然这是一种浪费,因为在编译时已知长度.我已经测试过用这个替换const字符串部分要快得多(无论出于何种原因,在x64中更多):

s.append("const string",12);
Run Code Online (Sandbox Code Playgroud)

实际上对字符进行计数是令人烦恼,耗时且容易出错的,所以这样做会更好一些:

s.append("const string",sizeof("const string")-1);
Run Code Online (Sandbox Code Playgroud)

这仍然有点容易出错(即更改第一部分但忘记更改第二部分)所以宏可以帮助这个:

#define strnsizeof(s) s,sizeof(s)-1
s.append(strnsizeof("const string"));
Run Code Online (Sandbox Code Playgroud)

问题1:任何人都有更好/更清洁的解决方案吗?

我还有一个扩展的字符串类,我使用<<运算符来连接字符串和各种其他对象类型.类似的问题在这里,这很好,干净(对我来说):

s << initial_string << "const string" << terminating_string;
Run Code Online (Sandbox Code Playgroud)

当我有一个运算符用于我自己的对象类型(其长度是一个组件)时,追加操作是快速而简单的,但是当它const char *再次到达这里时,即使它在编译时是恒定的,我也没有得到长度.所以我可以通过创建一个小的结构来加快速度,这个结构需要一个const char *长度和长度:

s << initial_string
    << MyStr::ConstBuf(strnsizeof("const string"))
    << terminating_string;
Run Code Online (Sandbox Code Playgroud)

男孩变得丑陋.所以我也可以将其宏观化,例如:

#define MyStrConst(s) MyStr::ConstBuf(s,sizeof(s)-1)
s << initial_string
    << MyStrConst("const string")
    << terminating_string;
Run Code Online (Sandbox Code Playgroud)

更好,但不是很好.

问题2:任何人都获得了比封装常量字符串更好/更清晰的解决方案吗?

c++

7
推荐指数
1
解决办法
322
查看次数

如何通过编译错误找到C++拷贝构造函数的用途?

简而言之:是否有某种方法可以修改类定义,使得无论在何处使用它都无法在使用复制构造函数时进行编译?

我有一个非常大的项目,正在清理一些类定义.有一个类我明确地不想使用复制构造函数(让我们忽略为什么这是为了讨论),为了安全起见,我想我只是将复制构造函数定义为私有而不是实际上实现它...这样,如果我试图在任何地方使用它会抛出编译错误.瞧,它编译得很好,但我有一个链接器错误...找不到复制构造函数实现!据推测,这意味着它在某个地方使用,但我无法找到它在哪里使用.顺便说一下,这是Visual Studio 2010.所以我的问题是,有什么方法可以修改类定义,使其无法在使用点编译?

class Sample {
private:
    // not implemented
    Sample( const Sample& rhs );
    Sample& operator=( const Sample& rhs );
public:
    // implemented
    Sample();
...
};

Sample *samp1 = new Sample;
Sample *samp2 = new Sample( *samp1 ); // <<-- inaccessible here!  this works
Run Code Online (Sandbox Code Playgroud)

大概是因为我没有遇到编译错误,但是我遇到了链接器错误,这意味着类本身(或朋友)正在进行复制构造的创建(因为这可以访问私有构造函数),但我肯定找不到它!

c++ oop copy-constructor visual-studio-2010

5
推荐指数
2
解决办法
1599
查看次数