在ARCENGINE下40万条数据的快速读取

仿造ARCMAP下的属性表打开,读取某层40万条数据,要么内存耗尽,要么读取很慢。但在AECMAP下试了一下,速度不慢,不知为何??主要代码:
              //要素个数
                int k = pFeatureLayer.FeatureClass.FeatureCount(null);

                IFeatureCursor pFeatureCursor;
                pFeatureCursor = pFeatureLayer.FeatureClass.Search(null, false);


                long lTotalRecords = 0;
                IFeature pFeature;
                pFeature = pFeatureCursor.NextFeature();

                string fldValue;
                //while (pFeature != null)
                for (int j = 0; j < k; j++)
                {
                    
                    if (pFeature !=null)
                    {


                    fldValue = new string[pFields.FieldCount];

                    for (int i = 0; i < pFields.FieldCount; i++)
                    {
                        string fldName;
                        fldName = pFields.get_Field(i).Name;
                        if (fldName == pFeatureLayer.FeatureClass.ShapeFieldName)
                        {
                            fldValue = Convert.ToString(pFeature.Shape.GeometryType);
                        }
                        else
                        {
                            fldValue[i] = Convert.ToString(pFeature.get_Value(i));
                            if (fldValue[i].Contains("0:00:00"))
                            {
                                string a = fldValue[i].Replace(" 0:00:00", "");
                                fldValue[i] = a;
                            }
                        }
                    }
                    dtGridView.Rows.Add(fldValue);
                    fldValue = null;

                    System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeature);

                    pFeature = pFeatureCursor.NextFeature();
                    lTotalRecords++;

                    if (lTotalRecords % 100 == 0)
                    {
                        GC.Collect(); 
                    }


                }

                }
              
                System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor);

                tbarTotalRecords.Text = "共有" + Convert.ToString(lTotalRecords) + "条记录";
[/i][/i][/i][/i]
已邀请:

朱新颖

赞同来自:

使用IQueryFilterDefinition3.SetPaginationClause进行分页显示吧,不要一下都查询出来,比如当你点击属性表下一页的时候在查询第二页并显示

YoungHappy

赞同来自:

1)如果不经常编辑修改的话,你可以建立索引 (参考相关链接:http://blog.csdn.net/linghe301 ... 03233
2)然后利用楼上所说的分页查询,可以按需查询
3)有游标查询的时候,建议参数设置成True;(pFeatureLayer.FeatureClass.Search(queryfilter, true))
4)COM对象管理建议使用ComReleaser来管理,循环中用GC.Collect回收不建议使用
 
个人愚见,希望对你有所帮助

要回复问题请先登录注册