我们近期在做一个CS端的GIS跟踪系统,需要有跟地图交互。
目前用到的做法是,在Winform中使用WebBrowser控件,然后在WebBrowser控件中跟前台写的HTML做交互,HTML里面大部分都是手写的百度地图JS代码。但是现在发现有几个瓶颈,很难解决,希望各位有经验的大神支支招,救命一把。
1. 使用Webbrowser时间久了内存就会急剧上升,而且我们是要求实时刷新地图的,所以这就更要了亲命了。最厉害的情况是平均每秒增加1M内存,用不了多长时间机器就卡的死翘翘了。找了很多国内国外的资料,都没有给出很好的解决方法,最好的方法就是定时重启应用程序,但是这个举措对我们而讲很难接受。另一个折中的方案就是使用SetProcessWorkingSetSize,但是这个也是治标不治本的东西,并且还有可能衍生出更多的问题。当然,内存上升的这么厉害,跟下面这条应该有直接的关系。
2. 因为要在地图上画线,所以要从后台数据库读取一坨儿的坐标数据,大概每条路线几千条坐标的样子,当然,路线长度不一,坐标数量肯定也不一样。将读取到的数据要想办法扔到前台去,然后再画线。
目前的做法是:
A:在HTML页上放置hidden隐藏控件,用来存储坐标数据
B:在后台将数据转换成JSON,赋值到前台的hidden
String strLines = JavaScriptCommon.ConvertSerialize(dtLines);
webMap.SetWebElementValueById("hid_Lines", strLines);
C:然后执行前台的JS代码,将线画出来
webMap.Document.InvokeScript("ClearTaskLines");
webMap.Document.InvokeScript("DrawTaskLines");
但是,现在由于坐标数据量太大,在调试过程中很明显的能发现在赋值到前台hidden控件时,花费了很长时间,而且导致内存急剧上升。不知道有木有更好的方法
希望有做过的大师指点,感激不尽!