欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap FreeTalk
   您现在位于: 首页技术专栏ArcGIS应用与开发ArcGIS其它 → 正文
在MO中向图层添加记录的性能提高
07-10-16 15:00:03 作者:GIS雲中飛鹏 出处:GIS雲中飛鹏

经常看到有朋友说, 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条记录,效果就更加明显了。
原文:http://www.cnblogs.com/gispeng/archive/2007/05/24/757974.html


(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  

    关于我们友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
     
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.
     

                   滇ICP备05006901号