24小时热门版块排行榜    

查看: 1927  |  回复: 10

zzahkj

木虫 (著名写手)


[交流] Vb.net+ArcEngine生成点状图层的速度太慢了该怎么办?

Vb.net+ArcEngine生成点状图层的速度太慢了该怎么办?由于我做的是预警预报系统,速度尽可能短,现在生成全部点要好几天,这也太慢了,根本就不适用,请问有什么好的办法解决吗?我的代码如下:
CODE:
Public Sub dianshengcheng()
        Dim filePath As String = My.Computer.FileSystem.CurrentDirectory & "\ResultsFileName"
        If System.IO.File.Exists(filePath & "\点.shp") Then
            MessageBox.Show("点文件已存在")
            Main.AxMapControl1.AddShapeFile(filePath, "点")
        Else
            Dim pShpWksFact As IWorkspaceFactory = New ShapefileWorkspaceFactory()
            Dim pFeatWks As IFeatureWorkspace
            pFeatWks = CType(pShpWksFact.OpenFromFile(filePath, 0), IFeatureWorkspace)
            Const strShapeFieldName As String = "shape"
            Dim pFields1 As IFields
            Dim pFieldsEdit1 As IFieldsEdit
            pFields1 = New FieldsClass()
            pFieldsEdit1 = CType(pFields1, IFieldsEdit)
            Dim pField1 As IField = New FieldClass()
            Dim pFieldEdit1 As IFieldEdit = New FieldClass()
            pFieldEdit1.Name_2 = strShapeFieldName
            pFieldEdit1.Type_2 = esriFieldType.esriFieldTypeGeometry
            pField1 = CType(pFieldEdit1, IField)
            Dim pGeomDef1 As IGeometryDef = New GeometryDefClass()
            Dim pGeomDefEdit1 As IGeometryDefEdit = New GeometryDefClass()
            pGeomDefEdit1 = CType(pGeomDef1, IGeometryDefEdit)
            pGeomDefEdit1.GeometryType_2 = esriGeometryType.esriGeometryPoint
            pGeomDefEdit1.SpatialReference_2 = Main.AxMapControl1.Map.SpatialReference
            'pGeomDefEdit1.HasZ_2 = True
            pFieldEdit1.GeometryDef_2 = pGeomDef1

            pFieldsEdit1.AddField(pField1)
            pFields1 = CType(pFieldsEdit1, IFields)

            pField1 = New Field
            pFieldEdit1 = pField1
            With pFieldEdit1
                pFieldEdit1.Length_2 = 10
                pFieldEdit1.Name_2 = "温度"
                pFieldEdit1.Type_2 = esriFieldType.esriFieldTypeDouble
            End With
            pFieldsEdit1.AddField(pField1)
            pField1 = New Field
            pFieldEdit1 = pField1
            With pFieldEdit1
                pFieldEdit1.Length_2 = 10
                pFieldEdit1.Name_2 = "盐度"
                pFieldEdit1.Type_2 = esriFieldType.esriFieldTypeDouble
            End With
            pFieldsEdit1.AddField(pField1)
            pField1 = New Field
            pFieldEdit1 = pField1
            With pFieldEdit1
                pFieldEdit1.Length_2 = 10
                pFieldEdit1.Name_2 = "水质指标"
                pFieldEdit1.Type_2 = esriFieldType.esriFieldTypeDouble
            End With
            pFieldsEdit1.AddField(pField1)
            Dim pFeatureClass1 As IFeatureClass
            pFeatureClass1 = pFeatWks.CreateFeatureClass("点", pFields1, Nothing, Nothing, esriFeatureType.esriFTSimple, strShapeFieldName, "")
            Dim pPointCol As IPointCollection = New MultipointClass()
            Dim sr As StreamReader = New StreamReader(My.Computer.FileSystem.CurrentDirectory & "\shu\dianceng.txt")
            Dim str As String = sr.ReadLine()
            While str IsNot Nothing
                Dim strs() As String = Regex.Split(str, "        ")
                Dim x As Double = Convert.ToDouble(strs(0))
                Dim y As Double = Convert.ToDouble(strs(1))
                Dim t As Double = Convert.ToDouble(strs(2))
                Dim s As Double = Convert.ToDouble(strs(3))
                Dim c As Double = Convert.ToDouble(strs(4))
                Dim pPoint As IPoint = New PointClass()
                pPoint.X = x
                pPoint.Y = y
                Dim missing As Object = Type.Missing
                pPointCol.AddPoint(pPoint, missing, missing)
                str = sr.ReadLine()
                Dim i As Integer
                For i = 0 To pPointCol.PointCount - 1 Step 1
                    Dim newFeature As IFeature = pFeatureClass1.CreateFeature
                    newFeature.Shape = pPointCol.Point(i)
                    newFeature.Value(newFeature.Fields.FindField("温度")) = t
                    newFeature.Value(newFeature.Fields.FindField("盐度")) = s
                    newFeature.Value(newFeature.Fields.FindField("水质指标")) = c
                    newFeature.Store()
                Next
            End While
            Main.AxMapControl1.Refresh()
            Main.AxMapControl1.AddShapeFile(filePath, "点")
            MessageBox.Show("文件创建成功")
        End If
    End Sub

[ Last edited by zzahkj on 2011-5-6 at 15:36 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

efeng522

木虫 (初入文坛)



小木虫(金币+0.5):给个红包,谢谢回帖
这个要看你数据量的大小,如果数据量不大,那么这个效率肯定是不正常的;如果数据量确实有这么大,你就要考虑是否有必要一次性生成这么多数据,或者在这么大的空间范围内生成数据。
VB不熟,所以代码没细看,只是泛泛而谈,抛砖引玉
2楼2011-05-06 16:07:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zzahkj

木虫 (著名写手)


引用回帖:
Originally posted by efeng522 at 2011-05-06 16:07:05:
这个要看你数据量的大小,如果数据量不大,那么这个效率肯定是不正常的;如果数据量确实有这么大,你就要考虑是否有必要一次性生成这么多数据,或者在这么大的空间范围内生成数据。
VB不熟,所以代码没细看,只是 ...

数据量还是非常大的,必须得一次性生成这么多数据!我也觉得这个效率不正常,可没有很好的办法解决?
3楼2011-05-06 16:25:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiangling1

金虫 (正式写手)



小木虫(金币+0.5):给个红包,谢谢回帖
zzahkj(金币+10): 2011-05-07 15:43:13
后面的循环可以优化,你把For循环提出来

你把三个属性封装一下,循环一次,把三个属性赋进去值

你这样做出来的点的属性值是不对的

你多写几个函数,把这段代码分解开一定不要循环里面再有循环

速度会增加的
4楼2011-05-06 21:31:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zzahkj

木虫 (著名写手)


引用回帖:
Originally posted by xiangling1 at 2011-05-06 21:31:46:
后面的循环可以优化,你把For循环提出来

你把三个属性封装一下,循环一次,把三个属性赋进去值

你这样做出来的点的属性值是不对的

你多写几个函数,把这段代码分解开一定不要循环里面再有循环

速度会 ...

谢谢你啊!我去掉了里面一个循环,6000多个点生成要二十几分钟,这个速度是不是还慢呢?我听说一秒钟就可以生成上万个点才是正常的?
5楼2011-05-07 10:15:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiangling1

金虫 (正式写手)



小木虫(金币+0.5):给个红包,谢谢回帖
恩,还是有些慢,6000个点对于计算机来说是小事一桩

如果你的计算机配置可以,瞬间就可以完成的

我以前用c#,5秒左右可以完成,不过没有这么多点

你先再优化一下,如果不行,你可以发给我,我给你调一下
6楼2011-05-07 13:29:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiangling1

金虫 (正式写手)



小木虫(金币+0.5):给个红包,谢谢回帖
这要是这儿用到的是文件流的,所以速度稍稍有点慢
7楼2011-05-07 13:31:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zzahkj

木虫 (著名写手)


引用回帖:
Originally posted by xiangling1 at 2011-05-07 13:31:30:
这要是这儿用到的是文件流的,所以速度稍稍有点慢

那还有没有办法提高速度?
8楼2011-05-07 15:42:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

雷小雨

银虫 (著名写手)



小木虫(金币+0.5):给个红包,谢谢回帖
没有运行环境,读了一下代码
在while循环里面,第1次for循环生成pPointCol的第1个点
第2次for循环生成pPointCol的第1~2个点
第3次for循环生成pPointCol的第1~3个点
第N次for循环生成pPointCol的第1~N个点

也就说,第i个点生成了N-i+1次,所以并不是生成了N个点,而是生成了N(N+1)/2个点,时间从O(N)上升到了O(N^2),不知道我理解得对不对

[ Last edited by 雷小雨 on 2011-5-8 at 11:38 ]
9楼2011-05-08 11:37:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zzahkj

木虫 (著名写手)


引用回帖:
Originally posted by 雷小雨 at 2011-05-08 11:37:00:
没有运行环境,读了一下代码
在while循环里面,第1次for循环生成pPointCol的第1个点
第2次for循环生成pPointCol的第1~2个点
第3次for循环生成pPointCol的第1~3个点
第N次for循环生成pPointCol的第1~N个点

...

呵呵 是啊  我搞错了  我现在把for循环去掉  速度大概是6000多个点完全生成要二十多分钟,这个速度是快是慢呢,由于我做的是预警系统,十分钟别人都嫌慢,不知还有没有提高速度的方法?
10楼2011-05-08 12:46:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

雷小雨

银虫 (著名写手)



小木虫(金币+0.5):给个红包,谢谢回帖
我去看了一下我以前程序的运行记录,60595个点,1小时52分钟,跟你这个速度差不多,算法跟你一样的

[ Last edited by 雷小雨 on 2011-5-8 at 14:56 ]
11楼2011-05-08 14:50:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 zzahkj 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 梁成伟老师课题组欢迎你的加入 +6 一鸭鸭哟 2026-03-14 7/350 2026-03-15 22:12 by Winj1e
[考研] 求老师收留调剂 +4 jiang姜66 2026-03-14 5/250 2026-03-15 20:11 by Winj1e
[考研] 一志愿985,本科211,0817化学工程与技术319求调剂 +3 Liwangman 2026-03-15 3/150 2026-03-15 18:16 by JourneyLucky
[考研] 274求调剂 +4 时间点 2026-03-13 4/200 2026-03-15 15:29 by Rambo13
[考研] 求调剂 +3 清风问长安 2026-03-09 3/150 2026-03-14 02:15 by JourneyLucky
[考研] 一志愿北京化工大学材料与化工296分求调剂 +16 稻妻小编 2026-03-09 18/900 2026-03-14 02:00 by JourneyLucky
[考研] 环境调剂 +6 晓看天暮看云 2026-03-09 6/300 2026-03-14 01:16 by JourneyLucky
[考研] 318求调剂 +3 李新光 2026-03-10 3/150 2026-03-14 00:21 by JourneyLucky
[考研] 材料与化工(0856)304求B区调剂 +6 邱gl 2026-03-12 7/350 2026-03-13 23:24 by 邱gl
[考研] 材料专硕288分求调剂 一志愿211 +4 在家想你 2026-03-11 4/200 2026-03-13 22:49 by JourneyLucky
[考研] 085600调剂 +5 漾漾123sun 2026-03-12 5/250 2026-03-13 22:06 by 星空星月
[考研] 277求调剂 +4 anchor17 2026-03-12 4/200 2026-03-13 11:15 by 白夜悠长
[考研] 289求调剂 +3 李政莹 2026-03-12 3/150 2026-03-13 11:02 by 求调剂zz
[考研] 材料专硕274一志愿陕西师范大学求调剂 +4 薛云鹏 2026-03-13 4/200 2026-03-13 10:40 by 学员8dgXkO
[考研] 化工学硕306求调剂 +9 42838695 2026-03-12 9/450 2026-03-13 10:16 by houyaoxu
[考博] 26读博 +4 Rui135246 2026-03-12 10/500 2026-03-13 07:15 by gaobiao
[考研] 333求调剂 +3 152697 2026-03-12 4/200 2026-03-13 07:08 by Iveryant
[考研] 纺织、生物、化学、材料相关专业招生了 +4 耶耶业 2026-03-09 7/350 2026-03-12 19:05 by Equinoxhua
[考研] 家人们 调剂不迷路 看这里 +8 likeihood 2026-03-09 13/650 2026-03-10 08:09 by likeihood
[考研] 一志愿山东大学,总分327,英语二79,有论文,有竞赛,已过四六级 +3 木木目目1 2026-03-09 3/150 2026-03-09 19:52 by yuningshan
信息提示
请填处理意见