默认头像
路人甲
路人甲
  • 注册日期2005-04-18
  • 发帖数4
  • QQ
  • 铜币88枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2887回复:5

请教vb supermap高手关于内存泄漏问题 在线等待

楼主#
更多 发布于:2005-04-18 11:20

我用vb和supermap写的代码如下:          SuperMap1.Layers.RemoveAll     SuperMap1.disconnect     SuperMap1.Close

   SuperMap1.Connect SuperWorkspace1.Handle     SuperMap1.FilterText = True     SuperMap1.openmap "gdmap"     SuperMap1.Refresh

或用    Dim objLayers As soLayers     Set objLayers = SuperMap1.Layers     SuperMap1.Layers.RemoveAll     Set objLayers = Nothing     Set frmgps = Nothing     SuperMap1.disconnect     SuperMap1.Close

   SuperMap1.Connect SuperWorkspace1.Handle     SuperMap1.FilterText = True     SuperMap1.openmap "gdmap"     SuperMap1.Refresh

我是多个数据源放在同一个工作空间里,地图是放在子窗体,在子窗体中我先关闭地图,然后再打开另外一个地图,我只做这个操作的情况下,在任务管理器里发现程序内存没有释放,地图切换的越多次,内存泄露的越多,最多时泄露有260多M,请教高手是什么原因?

在线等待,谢谢!

喜欢0 评分0
默认头像
论坛版主
论坛版主
  • 注册日期2003-07-27
  • 发帖数76
  • QQ
  • 铜币269枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2005-04-25 15:26

怎样切换地图的?

贴代码时,请详细说明这些代码写在什么样的事件中等信息,便于给您检查原因。

举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2005-04-18
  • 发帖数4
  • QQ
  • 铜币88枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2005-04-25 17:05

我用vb和supermap写,放在菜单里

如:

地图(主菜单)

广州(子菜单)

深圳(子菜单)  

我在“广州”菜单CLICK事件中输入以下代码:

   SuperMap1.Layers.RemoveAll     SuperMap1.disconnect     SuperMap1.Close

   SuperMap1.Connect SuperWorkspace1.Handle     SuperMap1.FilterText = True     SuperMap1.openmap "gzmap"     SuperMap1.Refresh

在“深圳”菜单CLICK事件中输入以下代码:

   SuperMap1.Layers.RemoveAll     SuperMap1.disconnect     SuperMap1.Close

   SuperMap1.Connect SuperWorkspace1.Handle     SuperMap1.FilterText = True     SuperMap1.openmap "szmap"     SuperMap1.Refresh

我是多个数据源放在同一个工作空间里,如广州地图(gzmap)对应的是广州数据源,深圳地图(szmap)对应的是深圳数据源,地图是放在子窗体,在菜单中我点击“广州”,等地图打开后再点击“深圳”,这样反复操作,我只做这种操作的情况下,在任务管理器里发现程序内存没有释放,地图切换的越多次,内存泄露的越多,最多时泄露有260多M,请教高手是什么原因?

举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2004-10-19
  • 发帖数19
  • QQ
  • 铜币191枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2005-04-25 19:26

SuperMap中定义的对象,自己不会释放内存,必需手工去做。

如Set objLayers = SuperMap1.Layers

最后一定要 set objLayers = nothing

举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2005-04-18
  • 发帖数4
  • QQ
  • 铜币88枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2005-04-26 09:44

我在顶楼已说明

或用    Dim objLayers As soLayers     Set objLayers = SuperMap1.Layers     SuperMap1.Layers.RemoveAll     Set objLayers = Nothing     SuperMap1.disconnect     SuperMap1.Close

   SuperMap1.Connect SuperWorkspace1.Handle     SuperMap1.FilterText = True     SuperMap1.openmap "gzmap"     SuperMap1.Refresh

还是不行啊

[此贴子已经被作者于2005-4-26 9:55:42编辑过]
举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2003-10-22
  • 发帖数7
  • QQ
  • 铜币92枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2005-04-26 15:19

   先Close,再Disconnect,试试看

   SuperMap1.Layers.RemoveAll     SuperMap1.Close

   SuperMap1.disconnect     

   SuperMap1.Connect SuperWorkspace1.Handle     SuperMap1.FilterText = True     SuperMap1.openmap "gzmap"     SuperMap1.Refresh

举报 回复(0) 喜欢(0)     评分
默认头像

返回顶部