http://www.gissky.net- GIS空间站

我要投稿 投稿指南 RSS订阅 网站资讯通告:
搜索: 您现在的位置: GIS空间站 >> 技术专栏 >> ArcGIS >> MapObjects >> 正文

在MO中向图层添加记录的性能提高

作者:zdq    文章来源:GIS空间站 httpzdq.gissky.net    点击数:    更新时间:2006-7-1
摘要:

经常看到有朋友说, MO添加记录咋那么慢呢,其实MO里面有一个参数的设置,能对添加记录的性能有很大的影响。这个参数就是Recordset对象的AutoFlush属性,先看看MO帮助中的描述把:

The property only applies to Recordsets of MapLayers based on shapefiles. Setting AutoFlush to False will result in performance improvements for "batch" type operations such as creating new shapefiles. For updates to be reliably seen as they occur, AutoFlush should be set to True. Setting AutoFlush to True will flush the file, as will StopEditing or releasing the Recordset object.

然后用下面的代码测试一下效果:

  Dim dc As New DataConnection, lyr As New MapLayer, tb As New TableDesc, rs As Recordset
  Dim W As Double, H As Double, pt As New Point, t As Date
  dc.Database = "E:\"
  If Not dc.Connect Then Exit Sub
  Set lyr.GeoDataset = dc.AddGeoDataset("TestSpeed", moShapeTypePoint, tb)
  If Not lyr.Valid Then Exit Sub
  Map1.Layers.Add lyr
  Set rs = lyr.Records
  Randomize
  H = Map1.Extent.Height
  W = Map1.Extent.Width
  '关键代码行, 注释后添加的效率就会非常低
  rs.AutoFlush = False
  t = Now
  For i = 1 To 1000
    pt.Set Rnd * W, Rnd * H
    rs.AddNew
    rs.Fields("Shape").Value = pt
    rs.Update
    Text1.Text = "当前位置:" & i
    DoEvents
  Next
  rs.StopEditing
  Map1.Refresh
  Text2.Text = "总计耗时(秒): " & DateDiff("s", t, Now)

就会发现添加1000条记录的时候,如果autoflush为false,那么不到1秒就可以完成,否则需要80秒左右。如果添加1000条记录,效果就更加明显了。

看来在成批添加数据的时候,还是考虑一下这个东东吧。

Tags:ArcGIS,MapObjects  
责任编辑:gissky
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 中国地图