在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]
//要素个数
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]
2 个回复
朱新颖
赞同来自:
YoungHappy
赞同来自:
2)然后利用楼上所说的分页查询,可以按需查询
3)有游标查询的时候,建议参数设置成True;(pFeatureLayer.FeatureClass.Search(queryfilter, true))
4)COM对象管理建议使用ComReleaser来管理,循环中用GC.Collect回收不建议使用
个人愚见,希望对你有所帮助
要回复问题请先登录或注册
发起人
相关问题
问题状态