我想了解创建ArcGIS函数的自定义实现所需要的内容。特别是,我想实现GeoAnalyst.ISurfaceOp2.Visibility(),以使其运行更快。现在,每次调用Visibility()大约需要3秒钟。据我有限的理解,瓶颈是将临时栅格写入文件系统。如果可以在内存中完成此操作,我怀疑处理时间将大大减少。我正在.NET项目中执行此操作,但是欢迎使用任何语言的解决方案。
我想了解创建ArcGIS函数的自定义实现所需要的内容。特别是,我想实现GeoAnalyst.ISurfaceOp2.Visibility(),以使其运行更快。现在,每次调用Visibility()大约需要3秒钟。据我有限的理解,瓶颈是将临时栅格写入文件系统。如果可以在内存中完成此操作,我怀疑处理时间将大大减少。我正在.NET项目中执行此操作,但是欢迎使用任何语言的解决方案。
Answers:
该答案纪念并扩展了评论中的某些讨论。甲RAM磁盘模拟使用一些在计算系统中的RAM的外部磁盘驱动器。它的读取和写入速度可与内存中的高速缓存相媲美,为转换协议将面向磁盘的命令转换为面向存储器的命令的开销少了一些。通过运行特殊的操作系统级别的软件(“设备驱动程序”)来创建RAM磁盘。开源和免费RAM磁盘可用于许多操作系统,包括Windows。
因此,加速由于中间磁盘I / O造成的瓶颈的一种方法是设置一个RAM磁盘(如果需要,请购买额外的RAM)并将暂存文件夹放置在此处。(这通常是一个软件设置。)
另一种选择是安装高端DRAM固态设备(SSD),该设备本质上是一块单独包装的RAM块,带有一个电子接口,像磁盘驱动器一样工作。它安装在代替磁盘驱动器的计算系统中,其行为与不带任何其他软件的另一个磁盘驱动器完全相同,但读写速度几乎与内存访问一样快。这些比较昂贵,但是即使对于非常大的中间栅格存储,也可能只需要一个很小的存储空间。
在执行任何这些步骤之前,必须进行概要分析确定瓶颈在哪里的过程。(Windows近年来提供了功能越来越强大的概要分析和监视应用程序,在Windows 7中可以作为“任务管理器/资源监视器”对使用,当然,其他操作系统也可以使用许多类似的应用程序。)许多系统是自动配置的,或者可以配置为在短期内在RAM中缓存磁盘读写。缓存的工作原理几乎与RAM磁盘相同,但可能甚至更快:软件认为它正在将中间文件写入磁盘,但是OS会先将它们临时写入RAM,而不是访问磁盘,以期尽快获得相同的数据。将被读回并删除,在这种情况下,将不再需要物理写入。
给定任何完整可见性计算所需的计算量(在幼稚算法中,每个视点必须对每个单元检查一次可见性),至少应该怀疑可能是计算速度而不是磁盘I / O这里。如果是这种情况,RAM磁盘或SSD将浪费时间和金钱。相反,应该将精力放在分析和改进底层算法上。
关于RAM磁盘性能是否有助于ArcGIS的一些讨论出现在另一个线程中。
不幸的是,您不能将IRasterAnalysisEnvironment设置为与内存中的工作区一起使用。
该线程解决了该问题。