小编Pau*_* K.的帖子

强制在Google Chrome中收集垃圾

我们正在开发一个带有ZK的单页Web应用程序,它不断与服务器通信并更新其部分屏幕.更新频率可以达到1秒.在这些更新期间,对大型JS对象的引用将丢失,并且最终必须由垃圾收集器清理这些对象.

据我们所知,Chrome只在非活动标签上运行其垃圾收集器.这对我们来说是一个问题,因为应用程序的选项卡通常是活动的,几乎从不刷新,因此JS对象永远不会被收集.如果保持活动状态足够长时间,则选项卡最终会崩溃(Aww Snap消息).

我们需要手动启动垃圾收集.到目前为止,我们已尝试运行Chrome --js-flags="--expose-gc"并运行gc(),但它会引发异常:

ReferenceError: gc is not defined
Run Code Online (Sandbox Code Playgroud)

这不会发生在Firefox上 - 内存使用或多或少是一个常数.

强制刷新页面不是一种选择.

我们将不胜感激任何建议.

编辑:我们已经尝试运行window.gc()gc()双方在Chrome版本23.0.1271.97 m25.0.1364.2 dev-m

javascript garbage-collection google-chrome zk

44
推荐指数
3
解决办法
5万
查看次数

Makefile的好习惯

我的项目中有以下目录结构:

bin/
dist/
include/
??? module_a/
??? module_b/
Makefile
src/
??? module_a/
??? module_b/
Run Code Online (Sandbox Code Playgroud)

文件夹include/中包含*.hpp的,同时*.cpp的是src/.我想编译所有的源bin/,然后将它们连接起来dist/.对我来说似乎是一个非常合理的愿望.

我想知道这个案例的Makefile的最佳实践.我所能找到的只是%.o: %.cpp目标,但由于源文件和二进制文件夹不同,这并不能真正起作用.

我试图使用这样的东西:

D_SRC = src
D_BIN=bin

F_CPP   :=  $(shell find $(D_SRC) -iname '*.cpp' -type f)
F_OBJ   :=  $(shell echo $(F_CPP) | sed s:\ :\\n:g | sed s:$(D_SRC):$(D_BIN): | sed 's:^\(.*\)\.cpp$$:\1\.o:')

$(F_OBJ): $(F_SRC)                                                                  
    $(foreach file, $(F_SRC), \                                                     
        $(GXX) $(CXXFLAGS) -c $(file)\                                              
    )
Run Code Online (Sandbox Code Playgroud)

此目标不起作用,因为$(F_OBJ)路径以#开头bin/,同时foreach将源编译为当前工作目录.我可以让它编译成bin/,但只有更多的 …

makefile

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