Questions tagged «performance»

性能涉及计算系统如何有效利用资源。

3
使用ArcPy在ArcGIS Desktop中按点选择ArcSDE多边形?
我一直认为我必须缺少某些东西,但是ArcGIS 10中似乎没有工具可以通过ArcPy从点(X,Y)位置的图层中选择要素(特别是多边形)。这种工具的参数只是图层名称和XY位置。 目前,我通过创建包含该点的点要素类并对其执行SelectLayerByLocation来解决此问题。但是,当面要素类在Oracle中(可通过ArcSDE 9.x访问)并且包含350万个面时,我认为一两秒钟(用更少的代码)将花费5分钟以上的时间进行选择更合适。要素类具有空间索引,我尝试使用arcpy.env.extent(SelectLayerByLocation似乎忽略了它)来限制访问的地理区域,但性能仍然很差。 有没有使用ArcGIS Desktop 10和ArcPy进行此操作的更快方法?

4
处理非常大的图像和图像镶嵌图时,大量的GPU内存是否有帮助?
似乎将极大的帮助将尽可能多的图像存储在GPU上进行平移和缩放等。 我们处理很多非常大的图像。大小从8 GB到数百GB不等。在家里,我有一个40英寸的4k显示器和一个具有12 GB视频内存的GTX Titan,对于我扔给它的一切,它的表现都非常好。查看图像时看起来也很棒。工作? 将QGIS,ArcMap中和PCI Geomatica中能够多千兆字节的图像和图像拼接在数百GB的范围打交道时,充分利用丰富的显存? 处理大量图像时,哪些GIS应用程序将从大量的GPU内存中获得最大的收益?

1
sql server空间索引性能
我有一张桌子,上面有大约200万条记录。我使用边界框以外的默认值创建一个空间索引。我一直注意到,有些查询非常快,有些则非常慢。确定因素出现在查询中使用的多边形的大小。 在较大的搜索区域,使用WITH(INDEX(SIX_FT5))会大大降低查询速度(从0秒降低到15+秒)。在较小的搜索区域中,情况恰恰相反。 这是我正在测试的一些查询: 快速: SELECT TOP(1000) * FROM [FT5] WHERE (shape.STIntersects(geometry::STGeomFromText('POLYGON ((-133462.805381701 -668610.241000959, 2934415.68824241 -668610.241000959, 2934415.68824241 2200521.65831815, -133462.805381701 2200521.65831815, -133462.805381701 -668610.241000959))', 2264)) = 1) 慢: SELECT TOP(1000) * FROM [FT5] WITH(INDEX(SIX_FT5)) WHERE (shape.STIntersects(geometry::STGeomFromText('POLYGON ((-133462.805381701 -668610.241000959, 2934415.68824241 -668610.241000959, 2934415.68824241 2200521.65831815, -133462.805381701 2200521.65831815, -133462.805381701 -668610.241000959))', 2264)) = 1) 有人知道这是怎么回事吗?

3
提高ArcMap中Bing等ArcGIS Online底图的显示性能?
我想知道是否有方法(在ArcGIS本身内)提高ArcMap中底图的显示性能。互联网连接最近进行了升级,因此它比以前快得多,并且我的意思是现在不需要花费1分钟来绘制Bing Imagery底图,而是现在需要30秒。 我通常会在关闭底图的情况下进行平移和缩放,一旦我认为自己处于所需的位置,便会打开底图,然后将手从鼠标上移开(尝试执行其他操作可确保我有一个旋转的圆圈,大多数情况下,可能会崩溃)。从这个职位上ArcGIS的论坛上,我已经从我的文档改变了我的显示缓存的位置,我的C盘,我可以看到的改善。 然后,我将位置更改为服务器,现在平移和缩放时大约需要5秒钟才能绘制。虽然对此感到很满意,但是我使用10.1的事实是否有所作为?我为使用10.0的同事更改了缓存位置,但是他们的性能根本没有提高。我不知道该怎么办,因为我无法对防病毒/防火墙部分做任何事情(这在IT的控制之下)。 这有点令人沮丧,尤其是当ESRI Maps for Office和ArcGIS for AutoCAD中的底图几乎立即绘制时,并且我可以放大而不必担心计算机会爆裂。我在ArcMap选项中当前的设置已启用硬件加速,并且更改了缓存位置。 我已经查看了有关管理本地显示缓存的帮助,但是除非缺少某些内容,否则我的设置似乎已经过优化。

4
使用R或Python将大栅格转换为折线的最快方法?
我有一个很大的栅格文件(129600 x 64800像素),其中包含全球水域(1位值0和1),并尝试提取海洋和内陆水岸线。 我曾尝试使用ArcGIS和QGIS将栅格从栅格转换为折线,但是这需要花费一定的时间。 有谁知道更好/更快的方式(Python或R)或更好的工具来完成此任务? 更新资料 R:rasterToContour可能是快速而精确的,但是如果您有一个非常大的数据集(如我的(8,398,080,000像素)),则需要非常大量的RAM(超过16GB),或者强制R在硬盘驱动器上进行更多处理,也将需要一段时间。 Python / GDAL:gdal_poligonize创建多边形而不是折线 更新2 R rasterToContour:rasterToContour不提供所需的结果。与ArcGIS(栅格到多边形,然后要素到线)相比,它没有提取确切的像素轮廓,如以下示例所示。 rasterToContour结果 ArcGIS结果 更新3 Python / GDAL:我已经在命令行上在测试数据集上针对ArcGIS运行gdal_polygonize,结果非常清晰: gdal:49秒 ArcGIS:1.84秒
14 python  r  performance 

5
使用ArcPy遍历1600万条记录?
我有一个包含8列和约1,670万条记录的表。我需要在列上运行一组if-else方程。我已经使用UpdateCursor模块编写了一个脚本,但是在记录了几百万条之后,它的内存不足。我想知道是否有更好的方法来处理这1670万条记录。 import arcpy arcpy.TableToTable_conversion("combine_2013", "D:/mosaic.gdb", "combo_table") c_table = "D:/mosaic.gdb/combo_table" fields = ['dev_agg', 'herb_agg','forest_agg','wat_agg', 'cate_2'] start_time = time.time() print "Script Started" with arcpy.da.UpdateCursor(c_table, fields) as cursor: for row in cursor: # row's 0,1,2,3,4 = dev, herb, forest, water, category #classficiation water = 1; herb = 2; dev = 3; forest = …

2
一个或多个服务中有很多层?(为什么)
我有一个难题,我正在就如何进行提出不同的建议。因此,id喜欢将其放入GIS-SE中以获得一些合理的答案。 场景: 客户端具有Web制图应用程序。不想拆分为多个较小的应用程序。 尽管这与现代的Web地图方法(即在一张主Web地图上有很多聚焦的Web Map应用程序)背道而驰,但我坚信对于某些用户而言,尝试在Web上复制GIS应用程序是好的(有时)。 客户已将其底图图层中的大部分缓存到单独的服务中。 客户在动态地图服务中仍需要额外的600-700层 ... 该服务将在所有这些层都关闭的情况下发布。 预计用户一次不会打开10-40多个层。 我想您对此的最初反应类似于我的反应(600+ ?! WTF ?!) 但是-要求是一成不变的,为什么不呢?他们以前的ArcIMS应用程序具有类似的功能,那么为什么这个较新的ArcGIS Server产品不能做到相同?即使这些层属于其他部门,用户潜在地也需要能够对整个层范围进行交叉比较和执行分析。 在下结论之前,客户端是一个ArcGIS Server管理员。 他们已经按照所有最佳实践规则管理了600层:例如,比例范围与定义查询相结合;标签上的注释;小规模地概括复杂的层;以MSD形式发布;等等 问题: 这里有什么更好的方法? 将所有600层发布到一项动态地图服务中 将各层划分为逻辑分组(水文,规划,生态,公用事业等) 如果您选择#1,则需要打开一些复杂的图层。如果要打开简单的点图层,则ArcGIS Server仍然必须重新渲染整个显示的图层。 如果您使用#2,则每次提出请求时,Web应用程序都可能不得不从单个地图服务中对ExportMaps进行多个GET请求(这很不好,或者是否会给#1上的ArcGIS Server带来额外的负担?) 然后,这导致配置和调整,以确保一切都尽可能快。我们可以将ArcGIS Server的后端扩展到多个主机,并拥有一些不错的硬件。 如果使用#1,则可以抛出AGS可处理的最大实例数。 如果您选择#2,则假定您评估了地图服务的性能(负载测试和查看等待时间),并相应地处理了最小/最大实例,以确保没有一个服务是“弱链接”。 我目前倾向于采用第二种方法,因为我的头脑仍然在告诉我,一项服务中包含600层是疯狂的,但是如果默认情况下将它们全部关闭,则确实没有问题。 很想听听您的想法。让我知道您是否需要通过评论获得更多信息,而不是寻找“使用桌面应用程序”或“教育他们以不同的方式做事”之类的答案。 从评论讨论中,我没有提及另一个考虑。服务将在其中使用的应用程序具有层级安全性(在应用程序级)。因此,将用户组(相当大)分配给特定角色,并且该角色将可以访问整个600层。其他角色将受到限制。

3
在MySQL中使用空间索引时性能不佳
重新建议在Stack Overflow上提出的一个问题,这是一个更好的论坛。 我正在尝试进行一些实验,以推动不是地理空间但非常适合的数据集,并且发现结果有些令人不安。数据集是基因组数据,例如人类基因组,其中我们有一个DNA区域,其中诸如基因之类的元素占据特定的起始和终止坐标(我们的X轴)。我们有多个占据Y轴的DNA(染色体)区域。目标是带回沿单个Y坐标与两个X坐标相交的所有项目,例如LineString(START 1,END 2)。 该理论听起来很合理,所以我将其推入了现有的基于MySQL的基因组项目中,并提出了一个表结构,如下所示: CREATE TABLE `spatial_feature` ( `spatial_feature_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `external_id` int(10) unsigned NOT NULL, `external_type` int(3) unsigned NOT NULL, `location` geometry NOT NULL, PRIMARY KEY (`spatial_feature_id`), SPATIAL KEY `sf_location_idx` (`location`) ) ENGINE=MyISAM; external_id表示我们已编码到该表中的实体的标识符并对其进行编码external_type。一切看起来都很不错,我输入了一些初步的数据(30,000行),这些数据似乎运行良好。当它增加到超过300万行标记时,MySQL拒绝使用空间索引,并且在强制使用空间索引时速度较慢(40秒与使用全表扫描的5秒相比)。当添加更多数据时,该索引开始使用,但性能损失仍然存在。强制关闭索引可使查询降低到8秒。我正在使用的查询看起来像: select count(*) from spatial_feature where MBRIntersects(GeomFromText('LineString(7420023 1, 7420023 1)'), location); …

1
为什么在小型数据集上进行简单联接会严重降低ArcMap的速度?
ArcGIS 9.3.1,ArcInfo。我有一些小型文件地理数据库和SDE要素类(每个实体有几千条记录,每列50列),它们是属性联接的对象。连接后,地图的绘制每次都会从亚秒级减慢到几秒,有时甚至更长。添加一些定义查询,这些查询引用了联接中的字段,是时候重绘时喝杯咖啡了。有什么想法为什么会这样?其他人曾经经历过吗?

4
ArcMap中多少层是多少层?
我在工作中使用Citrix虚拟软件连接在ArcGIS上工作。有时,它非常慢,而且没有对我正在处理的MXD进行任何更改,一分钟ArcMap可以以合理的速率运行,而下一分钟它可能会缓慢爬行。IT部门认为问题的原因是我的地图中的图层太多。我有一个预感,问题可能是硬件或软件配置,或者仅仅是我们首先使用Citrix的事实。 无论如何,在用于编辑的标准MXD中,我有57个SDE图层和2个文件地理数据库图层。绝大多数是我需要检查以进行编辑的图层。我必须检查每个图层是否存在任何数据,因为它们需要针对每个管道建设项目进行编辑和质量控制。只有几层是底图图层,我需要定期参考。 IT部门希望我将使用的层数减少到10个。在理想情况下,这很好。但是在现实世界中,这是不实际的。有了这样的建议,我将不得不使用大约5种不同的MXD来执行给定项目的编辑任务。我已经尝试过仅使用10层,这是严重的限制。我缺少与其他数据相关的数据上下文,因此必须多次重新访问同一区域,以确保所有数据都已更新。所有这些仅会稍微改善性能,并适度减少编辑时的崩溃次数。 所以我要问,是否有理想的层数?多少太多?


5
编译使用ArcGIS地理处理工具的Python脚本(至.exe)?
我已经使用Python编写代码已有几个月了,并且已经为主要的地理处理任务开发了一些相当复杂的脚本。话虽这么说,但由于我来自SQL / VBA / VBScript背景,因此我仍在学习很多东西。 我知道编译后的代码通常比语言解释器要处理的代码运行得更快,因此我对将地理处理Python脚本编译为.EXE文件以处理大数据的可能性感兴趣。 这有可能吗?如果是,那么编译正在导入arcgisscripting或arcpy模块的Python(.py)脚本的最佳方法是什么? 我花了几分钟试图找到我想做的事,搜索结果返回了这篇文章,其中包括:http : //www.ehow.com/how_2091641_compile-python-code.html 编译器似乎可以工作,但是在执行生成的.EXE文件时,出现了一个神秘错误,表明某些文件不可用。 Python脚本可以从命令行正常运行,但是我想知道如果我能够编译.py文件,是否可以看到一些细微的改进。同样,我正在处理一些需要20多个小时才能处理的大型数据集(从输入的水质采样点确定流域)。我会采取一切我可以改进的方式。 使用一组测试站点,与从ArcCatalog的新工具箱中将脚本设置为脚本工具相比,从命令行在ArcGIS外将脚本运行速度提高了10%。我一直从命令行运行脚本,而没有在专用计算机上打开的任何ArcGIS实例。 因此,是否可以编译导入arcgisscripting模块并调用ArcToolBox工具的Python脚本? 编辑 感谢您的输入,这对我很有帮助。该脚本主要是一种协调许多ArcGIS工具并以所需格式/位置/具有适当属性的输出的方式。我认为通过写临时文件夹而不是临时栅格文件的临时个人地理数据库,可以减少一些麻烦,因此可以将它们存储为ESRI GRID格式和IMG格式。我将检查探查器的建议。 我办公室里有一些人对Python提出质疑,主要是说与经过编译的Visual Basic程序或VB.NET程序相比,“经过编译的代码比通过解释器运行的代码要快得多”,但这是一个很好的观点,无论哪种方式,工具都将花费时间。而且,似乎对于当今的计算机而言,解释代码可能不会比编译后的代码慢那么多,以保证可以加倍努力。 编辑 -使用光栅格式更新程序的优化。 想跟进我对该Python程序的“优化”,并且通过将临时栅格写入GRID格式而不是个人地理数据库中,从而节省了2个小时的处理时间。不仅如此,数据大小的磁盘空间消耗显着减少。我最初编写所有栅格的过程(它们只是转换为栅格的点要素,然后是分水岭的栅格),仅这些文件就产生了37.1 GB的数据。将后两个数据输出以GRID格式写入文件夹时,数据减少到667 MB。 我很想知道文件GDB如何处理这些数据,尽管主要是通过数据大小来实现的。但是,将我的处理时间从9.5小时减少到7.5小时肯定足以倡导以GRID格式处理地理数据库之外的栅格。

6
使用RAM磁盘是否可以显着提高ArcGIS Desktop的性能?
我在运行ArcGIS Desktop 10的虚拟PC上配置了RAM磁盘,并将HKCU \ Software \ ESRI \ Output \ TempPath设置为RAM磁盘上的目录。很难感觉到这种配置有任何改进,我很好奇,是否有其他人在非虚拟计算机上完成过此测试以及结果如何。 轶事的答案很好。 另外,将缓存路径放在ram磁盘上可能不是一个好主意,但是有人这样做吗?(HKCU \软件\ ESRI \ Desktop10.0 \ Settings \ Cache路径)

2
为什么ArcPy脚本运行缓慢?
我有一个简单的arcpy脚本,可使用其内的多边形要素中的信息来更新点shapefile中的字段。在arcpy中完成100点需要9分钟,但是arcmap中的空间连接是瞬时的。我敢肯定有一个快速建立的方法可以解决这个问题。有人可以指出我正确的方向吗? import took 0:00:07.085000 extent took 0:00:05.991000 one pt loop took 0:00:03.780000 one pt loop took 0:00:03.850000 one pt loop took 0:00:03.791000 import datetime t1 = datetime.datetime.now() import arcpy t2 = datetime.datetime.now() print "import took %s" % ( t2-t1) #set up environment arcpy.env.workspace = "data\\" arcpy.env.overwriteOutput = True desc = …

1
作为ArcGIS工具的Python脚本性能与独立版本相比
有没有人研究过在ArcToolbox中运行Python脚本与作为独立脚本运行时的区别?我必须编写一个快捷脚本,通过提取波段1将一组RGB图像转换为单个波段。作为一个独立的脚本读写PC,它可以在约350秒内处理1000张相同大小的图像。从ArcToolbox运行相同的脚本大约需要1250秒。 import arcpy import csv from os import path arcpy.env.workspace = in_folder image_list = arcpy.ListRasters() #Create a CSV file for timing output with open(outfile, 'wb') as c: cw = csv.writer(c) cw.writerow(['tile_name', 'finish_time']) #Start the timer at 0 start_time = time.clock() for image in image_list: #Extract band 1 to create a …

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.