为什么ArcGIS和QGIS之间的性能速度如此不同?


17

好吧,我不是程序员,而是多产的GIS用户。我知道QGIS是用C ++和ArcGIS编写的。但是最近对于我的大多数任务,我总是尝试使用QGIS,不仅因为它是免费的,而且因为它的用户体验非常好。

那里的所有GIS Gurus您能告诉我这两个系统之间速度差异的一些原因吗?老实说,由于使用ArcGIS 10的速度,这让我很痛苦,并且我有一台配备8 GB RAM的PC。


3
您能否提供有关发现缓慢方面的更多信息?例如,浏览数据,分析栅格,地理处理等?
斯蒂芬·利德

一般经验非常慢..我的意思是添加shapefile ...打开arctoolbox等
GeoH2O 2012年

2
ArcGIS绝对不是用.NET编写的。它主要是用C ++编写的,还有很多其他东西用螺栓
钉住

1
@StephenLead,ogr2ogr转换shapefile(ref)时,我的时钟速度比Arcgis快36倍。我希望在相同的任务上QGIS会比准系统ogr2ogr慢一点,但是由于使用了ogr,因此不会有太大的变化(无论哪种方法都可以接受)。
马特·威尔基

3
也许是对话:特定的速度差异可以在其他地方进行,也许是聊天?chat.stackexchange.com/transcript/message/3510767#3510767
马特·威尔基

Answers:


10

ArcGIS似乎非常肿。我记得从Arcview 3.2迁移到ArcGIS 8.0时对性能的巨大影响,并且在很多地方仍然存在。当时我认为ESRI与将早期的Arc / Info代码迁移到Windows并不得不降低性能有很大关系,但是我不确定这是否成立。我记得在这个站点上看到了一些示例,这些示例在Arcview 3.3中的功能仍比ArcGIS 10快得多。 '。单击等待与技巧无关。

我认为现实是,ArcGIS在编写时并未考虑到性能,并且每个版本都在不断尝试将越来越多的功能扔到已经超载的代码平台上。


12

我对QGIS并不熟悉,但是我想知道它在可扩展性方面如何与ArcGIS相提并论。不幸的是,在可扩展性和性能之间似乎至少存在一些权衡。我发现获得ArcGIS可扩展性的最佳方法是查看注册表中找到的Esri的COM组件类别

每个类别代表一个位置,用户可以在其中注册包含实现Esri接口的类的dll。有很多类别。这些类别还包含狗食 -Esri不仅使用它们来发现第三方的自定义内容,而且还具有即用型功能。尽管这提供了非常细粒度的自定义级别,但也意味着需要在运行时发现并加载所有这些细颗粒。我不确定搬迁费用是多少,但这一定是很大的。

在此处输入图片说明

C:\Program Files (x86)\ArcGIS\Desktop10.0\Bin\Categories.exe

在Visual Studio中创建dll时,可以在其中指定基本地址要加载的dll。由于加载了许多不同大小的dll,因此提前了解ArcObjects定制将非常困难。不过,我不知道是否可以创建一个配置文件来指示将dll加载到内存中的位置。如果是这样,一旦用户在加载了dll的情况下运行了arcmap后,他通常会使用该例程,那么他可以运行将dll基址写入配置文件的例程。这样,当arcmap启动时,可以通过加载到那些地址中来避免重定位。再说一次,也许有64位无关紧要。

Esri在10.0引入了加载项。加载项的类别要小得多,并且发现不依赖于Windows注册表。而是,将外接程序dll压缩并放置在已知文件夹中。我不确定如何将性能与通过Windows注册表发现的dll进行比较。我认为主要目标是允许非管理员安装。

我假设问题是指台式机产品。新的ArcGIS Runtime产品重量更轻。我听说它被描述为MapObjects的替代品。看看它如何演变将是很有趣的。如果Esri确实为WPF Runtime引入了可扩展性,我希望他们在填充程序集列表时,不要使用Visual Studio使用的相同发现机制。第一次单击“添加引用...”变得非常缓慢。


3
几年前,一位Esri销售代表告诉我,Esri具有地球上最大的COM库,甚至比Microsoft所建的任何库都要容易。从那时起,我一直认为Arcgis Desktop呆滞的一部分是立即加载所有库,而不仅仅是按需获取点点滴滴。
马特·威尔基

@mattwilkie ArcMap的启动时间过去要慢得多。为了改进它,他们引入了即时扩展。我不确定,但是我认为对首次启动添加数据对话框时会加载的gx对象采取类似的方法。
Kirk Kuykendall '02

嗯。对于我来说,启动时间并不快(请允许我从内存而不是数据中获取数据,因此可能只是感知)。从单击任务栏中的Arcmap 10按钮开始17秒钟,直到准备好执行某项操作(“加载最后一张地图”向导已关闭)。第二节课约12秒。这是在用固态硬盘替换C:硬盘之后。昆腾第一次运行需要4秒,下一次需要2秒。
马特·威尔基

@mattwilkie是的,与此同时,他们还添加了新的工具栏等,因此,即时提供的任何性能提升都可能无法完全弥补新软件功能带来的延迟。还有其他要考虑的因素:是否正在访问许可证服务器?多少内存?如果删除/重命名normal.mxt,速度更快吗?(自首次启动以来,删除它后进行第二次测试将需要一些时间来重新创建它)您是否安装了自定义项?
Kirk Kuykendall,2012年

1
柯克:很好的答案。@mattwilkie:是的。Office女士曾经有大约400个(+?)COM对象。我认为,到目前为止,GeoDatabase本身就有那么多。事实是,无论好坏,ESRI都让COM疯狂了。我认为目前这是一个安全的决定。
拉吉·亚瑟·伯汉

8

请原谅我重新使用该线程,但是我可以举一个具体的示例,说明ArcMap和QGIS的用户体验如何不同。

今天,我需要在一个小国家/地区中建立一个间距为250米的点网格,将点网格裁剪到一个国家边界多边形,然后将几个栅格的值关联到该点网格。

在ArcMap中,从将数据下载到完成的数据集大约花了10分钟。在QGIS(弗罗茨瓦夫)中,仅用多边形剪切网格后,程序崩溃两次,然后运行了一个小时,然后才完成第三次尝试。这是一个带有4个双核和6Gb RAM的盒子。

我喜欢QGIS,这使我不喜欢使用ArcMap,但是我发现QGIS不能满足我的许多常见用例。

现在,如果任何人有任何性能调整建议可以解决此性能差距,我都会耳熟。

克里斯


同意,但是出于价值,我总是先涌向QGIS,如果它不能在那里返回ArcGIS
GeoH2O,2012年

1
对我来说听起来像个虫子。崩溃不是衡量性能下降的一种指标,而是某种错误现象的征兆。向QGIS人员报告
NicklasAvén2012年

您要建立一个多大的点网格?只需在QGIS(1.9)中的57k点上运行相同类型的操作即可。
Simbamangu 2012年

@Simbamangu,这是洪都拉斯周围的一个包围盒-大约50万点。在Nicklas_Aven:取景;如果我有时间可靠地复制,我会提交。
iamchriskelley,2012年

6

我认为Arc不是用.NET编写的。Arcobjects用C ++编写。由于使用了许多高级GUI,帮助工具,附加组件等,Arc的运行速度可能会变慢。QGIS是一款出色的软件,但缺少一些有用的功能,这些功能可能对初学者很有帮助。我也不认为ESRI(Arcobjects)中的基本Lavel工具很慢。通常,这取决于用户的技能,如果用户知道如何使用Arc,那根本就不会太慢。话虽如此,我还要提到,每种工具的性能都应逐案考虑。另一件事是,Arc首先出现在GIS领域。首先(相对于QGIS)总是存在错误,而下一代则更好,在这种情况下则更快,但这只是我个人的看法。


2
旁注:我怀疑至少ArcGIS核心的某些部分仍是用Fortran编写的(据传对于某些数字任务,它的速度与C一样快,如果不快于C的话):如果运行使用以下功能的.NET控制台应用程序ArcObjects,然后Ctrl+C在ArcObjects执行某些操作时按,您将从Fortran运行时库中收到一条消息。
stakx'2

5
此外,ArcObjects基于COM(早期的互操作性框架之一),并且也没有涉及具体细节,尤其是在托管(例如.NET)和非托管(C ++)代码之间进行编组时,它具有自己的性能负担。
blah238 '02

4
@stakx该Fortran代码中有开销,至少在栅格方面(空间分析)。我开发了SA的Fortran附加组件,发现它们的运行速度至少快了五倍。多年来,包装器上的包装器层已经建立起来以集成原始(老式的70年代和80年代)代码,这对Arc *性能造成了越来越大的负担。
ub

6

这与ArcGIS的性能有关: ArcMap,ArcCatalog在具有足够资源的新笔记本电脑上打开的速度很慢? 这可能部分解释了一些性能问题。该主题展示了硬件,网络和许可配置如何对ArcGIS性能产生重大影响。可能的是,某些报告的速度差异可能是由于这些因素引起的,而不是由于功能固有的差异引起的。

(发布为答案链接,因为评论容易丢失。)


1
丹,在这里,回复和评论的目的不同。没错,评论具有二等状态。原因之一是强调真正有用的答案。任何不是答案的事情都应该是使一个问题可以回答或改善一个问题或答案的努力:即使是真的很棒,这也是一种评论。
whuber

同意在我们的实验室版本的工作比我在我的电脑上运行的试用版好...
GeoH2O

2

我使用企业级数据(例如整个土耳其的兴趣点数据),有时只是检查数据集,我需要该渲染图。

如果您想使用ArcGIS来提高性能,那么我有几点建议。

始终使用投影数据。将地理数据库或ArcSDE与postgresql一起使用对我来说非常合适。

使用文件地理数据库,如果可能的话,使用arcsde可以提高操作速度。我在QGIS和ArcMap方面的个人经历实际上是相反的。由于在地图上渲染300万个点几乎需要几分钟。另一方面,ArcMap可以在几秒钟内渲染它们。

只是我的观点。


为什么要提供300万积分?如果您的意思是该层有30​​0万个点,并且其中某些点在您看来,则在QGIS中也很快速,但是您将需要一个空间索引。但是我同意,当您犯了尝试渲染太多几何图形的错误时,很难停止QGIS。即使使用esc杀死渲染时,已经渲染的geomemry有时也挂在那里。
NicklasAvén2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.