Questions tagged «memory»

3
解决ArcObjects的IFeatureClass.Search(仅在具有直接连接的SDE上)中的内存泄漏?
ESRI支持人员说,他们已重现了该问题,并已打开一个错误报告(NIM070156)。 我已确定,有内存泄漏(在非托管堆内存)时发生在工具我的.NET / C#ArcMap中附加执行空间查询(返回ICursor从IFeatureClass.Search与ISpatialFilter查询过滤器)。不再需要所有COM对象时,它们将被释放(使用Marshal.FinalReleaseCOMObject)。 为了确定这一点,我首先建立了一个带有ArcMap.exe的“专用字节”,“虚拟字节”和“工作集”计数器的PerfMon会话,并注意到,随着执行查询的工具的每次使用,这三者均稳步增加(每次迭代大约增加 500KB) 。至关重要的是,只有在使用直接连接(ST_Geometry存储,Oracle 11g客户端和服务器)对SDE上的要素类执行此操作时,才会发生这种情况。使用文件地理数据库以及连接到使用应用程序连接的较旧SDE实例时,计数器保持不变。 然后,我使用LeakDiag和LDGrapher(在此博客文章中提供了一些指导)并三次登录Windows Heap Allocator:第一次加载ArcMap并选择工具对其进行初始化之后,运行了数十次该工具,然后运行了它几十次。 以下是LDGrapher的默认视图(总大小)中显示的结果: 这是红线的调用堆栈: 如您所见SgsShapeFindRelation2,sg.dll中的功能似乎是导致内存泄漏的原因。 据我了解,sg.dll是ArcObjects使用的核心几何库,SgsShapeFindRelation2大概是在应用空间过滤器的地方。 在我做其他事情之前,我只是想看看是否有人遇到了这个问题(或类似的问题),以及他们是否有能力解决这个问题。另外,仅通过直接连接发生这种情况的原因可能是什么?这听起来像是ArcObjects中的错误,配置问题还是编程问题? 这是产生此行为的方法的最低工作版本: private string GetValueAtPoint(IPoint pPoint, IFeatureClass pFeatureClass, string pFieldName) { string results = ""; ISpatialFilter pSpatialFilter = null; ICursor pCursor = null; IRow pRow = null; try { pSpatialFilter = new SpatialFilterClass(); pSpatialFilter.Geometry = …

1
Python增加我的.mxd文件大小
我有一个运行以下程序的地理处理脚本。 arcpy.AddMessage("TEST...") 是的,只需一行代码。 当我运行脚本并保存文件大小增加时,空白的.mxd对我而言开始为391kb。 391 kb 431 kb 451 kb 471 kb and so on... 地理处理python脚本似乎每次都会将文件大小增加20-30 kb。 我已经在执行某些操作并将文件大小增加40-60 kb的实际脚本上运行了该测试... 我还运行了一个空白脚本,除了运行它外没有其他功能,但文件大小仍增加了20-30kb ... 从我能找到的ESRI Tech 文件大小增加可能是由于大量地理处理结果存储在ArcCatalog的ArcToolbox的“结果”选项卡中引起的。 按照本文中的步骤,我将文件大小从589 kb减少到293 kb,方法是将其保存到新的.mxd文件中 您的想法,经验?有没有人找到一种从python脚本自动删除结果标签的方法,这样我就不必每次都保存一个新的.mxd了? 更新: @AHIGH我尝试按照AHIGH的建议尝试使用Geoprocessing选项。似乎并没有阻止文件大小的增加。 @ artwork21如果我转到地理处理>结果并删除结果,这将减少文件大小。无论如何,是否有自动化的过程,以便在脚本运行后自动删除结果? ESRI:使用地理处理选项控制工具的执行 无论临时结果设置如何,仍然在ArcMap目录中的所有工具结果都将保存到磁盘。这是因为地理处理必须假设通过保存地图文档,您想要保存ArcMap目录中的所有内容 我希望保存所有内容,但文件大小过大的结果除外... 如果您不想保存地图文档,但是想要将数据保存在单个图层中,请右键单击该图层,然后单击“数据”>“永久”。 并不是一个切实可行的解决方案... 在10.1中,有一些新功能可以使我解决问题。猜猜将不得不尝试促使我的公司尽快升级到10.1。 Python工具 解决方法: 在“地理处理”>“地理处理选项”>“结果管理”>“保持结果小于:”>设置为“从不保存”。 这将阻止文件大小增加。 或者,您可以尝试编写脚本,以使其运行独立于Arcmap(即在不打开的情况下)。 您可以编写效率更高的代码,运行速度更快。就像一次运行多个mxd的脚本一样。
14 python  arcmap  memory 

1
为什么RasterLayer的@ data @ values插槽仅包含逻辑(0)而不包含实际值?
试图弄清楚为什么,当我在读取NDVI栅格时,@ data @ values插槽不包含实际值,除非手动设置它们。例如: NDVI <- raster("./filename.tif", crs="+proj=longlat +datum=WGS84") NDVI@data@values ## returns: logical(0) 使用相同方法加载的其他栅格并没有发生这种情况,因此感到困惑。我希望我可以更具体一些,但我不记得之前做过任何不同的事情。使用以下命令手动获取值很容易: NDVI1@data@values <- getValues(NDVI19east) 但是,对于每个文件都必须这样做。因此,分为两部分: 为什么首先发生这种情况?我知道这可能与栅格文件的存储方式有关(即是否存储在内存中),但是我真的不明白这将如何改变我应该使用的访问数据的方法... 是否有一种方法可以自动执行此过程(也许使用类似于lapply的方法)以将文件读取为RasterLayers并访问这些文件的值?我目前的项目涉及一次读取6-10个文件以获取NDVI,降雨和其他环境变量,以将它们组合并执行一些加权叠加。自动化导入数据的过程将很有帮助。
12 raster  r  memory 

3
如何从QGIS处理加载内存输出?
许多处理算法可以选择将输出保存为内存。如果从工具箱运行,则可以正常工作,因为您可以选中“运行算法后打开输出文件”框。 查看QGIS的源代码,似乎在函数中定义了用于加载内存层的代码Postprocessing.handleAlgorithmResults。该函数使用对alg.outputs列表的访问权,并执行以下操作: for out in alg.outputs: progress.setPercentage(100 * i / float(len(alg.outputs))) if out.hidden or not out.open: continue if isinstance(out, (OutputRaster, OutputVector, OutputTable)): try: if out.value.startswith('memory:'): layer = out.memoryLayer # NOTE!! QgsMapLayerRegistry.instance().addMapLayers([layer]) # NOTE!! else: # ... 当您从控制台运行处理算法时,是否可以在不访问该对象的情况下加载图层?我可以跑 processing.runalg("qgis:intersection", layer1, layer2, "memory:") 甚至 processing.runalg("qgis:intersection", layer1, layer2, "memory:myLayerName") 但是,我找不到一种方法来获取结果输出。

1
限制光栅包在R中使用的内存?
将raster软件包使用的内存限制R为5GB RAM 的最简单方法是什么? 理想情况下,我希望将超出此大小的所有栅格写入硬盘驱动器并从临时文件进行分析。 我正在使用Windows 7(64位)和R版本3.0.3。 这是我在具有16GB RAM的计算机上使用的一些代码,但是在我处理大型栅格时,它一直保持最大值: require(raster) memory.limit(size = 5000) rasterOptions(format="GTiff",overwrite=TRUE,datatype="INT1S", tmpdir="C:/Research/BIN",tmptime=1.1,progress="text",chunksize=1000, maxmemory=1000) rasterTmpFile("delete_me_") r <- raster("myraster.tif") r[r==0] <- NA 正是在脚本的此阶段,RAM使用量增加到全部16GB,然后停止工作并取消了该功能。 我需要在这里更改什么?
10 raster  r  memory 

1
在QGIS处理/ SEXTANTE中使用内存矢量层
我正在尝试qgis:clip从控制台运行算法,但是在使用内存层作为overlay参数时遇到错误。这是意料之中的,还是我做错了什么? 码: mem_layer = QgsVectorLayer("Polygon?crs=epsg:4326", "temp_layer", "memory") if not mem_layer.isValid(): raise Exception("Failed to create memory layer") mem_layer_provider = mem_layer.dataProvider() clip_polygon = QgsFeature() clip_polygon.setGeometry(QgsGeometry.fromRect( QgsRectangle( self.output_layer.extent().xMinimum() + 10, self.output_layer.extent().yMinimum() + 10, self.output_layer.extent().xMaximum() - 10, self.output_layer.extent().yMaximum() - 10 ) )) mem_layer_provider.addFeatures([clip_polygon]) mem_layer.updateExtents() output = self.output_layer_path + "2" processing.runalg("qgis:clip", layer, mem_layer, output) # …

1
如何增加运行Arc 10.1的最大内存使用量上限?
不知道这是否与GIS严格相关或是否属于StackOverflow ...关于ESRI ArcGIS 10.1,所以我将其粘贴在这里。 我在寻找选项来提高处理能力,并且我无益位和片约不断增加对内存的使用帽ArcGIS的。 我正在32位Windows 7、3.33GHz Intel DuoCore,4GB RAM计算机上使用ESRI ArcGIS 10.1(所有许可证)。我最终将升级到具有8GB Ram的功能更强大的64位计算机,并且想知道在此期间或新设备推出时该怎么做。 谢谢!
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.