文本检测的bug原因是我把icu整个都端了,自然icu里检测编码的好用接口也废弃了。不过我扣了一部分出来,用于检测UTF8和GBK编码。剩下的编码,经海绵宝宝
的提醒,用了微软的
接口,发现还挺好用的,感谢海绵宝宝。
接口用法:http://www.codeproject.com/KB/recipes/DetectEncoding.aspx?display=Print
需要注意的是,这个IMultiLanguage2::DetectInputCodepage接口返回S_FALSE的话,其实也是成功的,但msdn里显然写错了。害的我调试了一天,一直以为哪个地方没写对,汗···
内存泄漏的问题,花了比较久。这里需要隆重推荐下blink里的olipan项目,这货居然实现了C++的自动垃圾回收!而且是可以检测循环引用的。据说V8也把这货集成进去了。
有时间我要把这个组件从blink里扣出来,目前来看依赖不大,但是需要实现一些thread相关的接口。
看这段介绍:
在Oilpan项目之前,Blink和Chromium都采用引用计数技术(referencecounting)来管理内存,每个对象内部都一个引用计数,表明当前对象被引用了多少次,当引用技术归零时,对象就会被自动释放掉,这种方式一直以来都存在一个缺陷就是循环引用问题,就A引用了,B又引用了A,最后导致A和B都没有机会释放,此外,C++中启用引用计数还存在其他几个方面的问题:
尽管引用计数存在上述一些问题,但它很轻量级,仍然是C++程序中广泛使用的自动内存管理计数。Blink项目并不满足这种轻量级的内存管理方法,于是Oilpan项目提上日程,要实现对Blink对象的自动回收机制。比起引用计数技术,Oilpan垃圾回收器确实是个庞然大物,它实现了一个一般只有虚拟机才需要的高级特性,然而Blink项目力求精益求精,追求最好!
Oilpan实现了一种跟踪式的垃圾回收机制,具有如下特点:
截止到目前,Oilpan基础框架已经比较稳定,modules/中所有对象默认都启用了Oilpan,但Node层次结构还未正式启用。
另外还有:http://chinagdg.org/2016/01/smarter-garbage-collection-for-smoother/
感觉简直屌炸天。
回到正题,目前只需要调用blink::shutdown 即可。但我实验下发现还需要手段调用v8::Isolate::GetCurrent()->LowMemoryNotification();才能把v8的内存给回收了,
否则一些dom node一直被v8给占着。这点需要记录一下。可能是我哪个地方调用不对吧。以后再关注。