【发布时间】:2010-11-17 09:56:10
【问题描述】:
我正在为 ArcGIS 开发一个将与 ArcView 集成的自定义工具。该工具使用 C# 开发,基本上连接到 SQL 数据库,将数据提取到本地数据结构,执行大量统计分析,然后将结果显示为新层。
在此代码执行期间发生崩溃。
LinkedList<SegmentDbRecord> segmentData = new LinkedList<SegmentDbRecord>();
while( dataReader.Read() )
{
SegmentDbRecord record = new SegmentDbRecord();
record.first_stop_id = dataReader.GetInt32(0);
record.first_stopway = dataReader.GetString(1);
record.first_stopway_X = dataReader.GetString(2);
record.second_stop_id = dataReader.GetInt32(3);
record.second_stopway = dataReader.GetString(4);
record.second_stopway_X = dataReader.GetString(5);
record.segment_start = Tools.timeToFloat((DateTime)dataReader.GetValue(6));
record.segment_finish = Tools.timeToFloat((DateTime)dataReader.GetValue(7));
record.stop1_long = dataReader.GetFloat(8);
record.stop1_lat = dataReader.GetFloat(9);
record.stop2_long = dataReader.GetFloat(10);
record.stop2_lat = dataReader.GetFloat(11);
record.max_speed = dataReader.GetInt32(12);
record.avg_speed = dataReader.GetInt32(13);
record.route_hnd = dataReader.GetInt32(14);
record.seq_1 = dataReader.GetInt32(15);
record.seq_2 = dataReader.GetInt32(16);
record.route_name = dataReader.GetString(17);
segmentData.AddFirst(record);
}
在这个阶段,我只是将查询的结果保存在一个链表中。我很确定崩溃发生在内存分配期间,但我知道仍然有大量内存剩余,并且查询没有返回如此大的数据集。运行一个分配新“记录”的简单循环也会很快崩溃。你们中有人知道 ArcGIS 运行时中的内置保护可以阻止我分配超过一定数量的内存吗?
谢谢!
【问题讨论】:
-
我在这段代码中没有任何与 ArcGIS 相关的内容。您如何确定这是 ArcGIS 问题?您收到的确切错误消息是什么?
-
如果您能向我们展示所抛出异常的 ToString() 将会有所帮助。
-
我收到来自 ArcGIS 的崩溃并显示以下消息:“ArcGIS Desktop 遇到严重的应用程序错误,无法继续”我没有收到任何具体消息...只有发送邀请错误报告。我确实得到了一个“转储”文件,但它似乎不可用。
-
ArcGIS 是否使用非 .NET 组件?
-
如果我理解 Decapsuleur 的问题,他正在为 ArcMap 创建一个用 C++/COM 编写的插件。同样,ArcMap 的加载项是 COM DLL,所以这将是我们正在讨论的 COM 项目(如果我正在关注这个问题)。
标签: c# .net memory-management arcgis