我们正在开发一个带有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 m
和25.0.1364.2 dev-m
我的项目中有以下目录结构:
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/
,但只有更多的 …