Chciałbym dowiedzieć się, co trzeba zrobić, aby stworzyć niestandardową implementację funkcji ArcGIS. W szczególności chciałbym zaimplementować GeoAnalyst.ISurfaceOp2.Visibility (), aby przyspieszyć jego działanie. Obecnie trwa około 3 sekund na każde wywołanie Visibility (). Z mojego ograniczonego zrozumienia wąskim gardłem jest zapisywanie tymczasowych rastrów w systemie plików. Jeśli można to zrobić w pamięci, podejrzewam, że czas przetwarzania znacznie by się skrócił. Robię to w projekcie .NET, ale rozwiązania w każdym języku są mile widziane.
arcgis-10.0
arcobjects
.net
algorithm
Ross Fuhrman
źródło
źródło
Odpowiedzi:
Ta odpowiedź upamiętnia i rozwija część dyskusji w komentarzach. Dysku RAM emuluje zewnętrznego dysku z wykorzystaniem niektórych RAM w systemie komputerowym. Może odczytywać i zapisywać z prędkością porównywalną do buforowania w pamięci, pomniejszoną o narzut związany z protokołami translacji do konwersji poleceń zorientowanych na dysk na polecenia zorientowane na pamięć. Dysk RAM jest tworzony przez uruchomienie specjalnego oprogramowania na poziomie systemu operacyjnego, „sterownika urządzenia”. Dyski typu open source i bezpłatne dyski RAM są dostępne dla wielu systemów operacyjnych, w tym Windows.
Dlatego jednym ze sposobów przyspieszenia wąskiego gardła wynikającego z operacji we / wy dysku pośredniego jest skonfigurowanie dysku RAM (w razie potrzeby zakup dodatkowej pamięci RAM) i umieszczenie w nim folderu scratch. (Zazwyczaj jest to ustawienie oprogramowania).
Inną opcją jest zainstalowanie wysokiej klasy urządzenia półprzewodnikowego DRAM (SSD), które zasadniczo jest blokiem pamięci RAM w osobnym opakowaniu z interfejsem elektronicznym, który działa jak napęd dyskowy. Instaluje się w systemie komputerowym zamiast napędu dyskowego i zachowuje się dokładnie tak, jak inny napęd dyskowy bez dodatkowego oprogramowania, ale odczytuje i zapisuje prawie tak szybko, jak dostęp do pamięci. Są one stosunkowo drogie, ale prawdopodobnie tylko niewielki jest potrzebny nawet do bardzo dużego pośredniego przechowywania rastrowego.
Przed podjęciem któregokolwiek z tych kroków ważne jest profilowanieproces ustalania, gdzie naprawdę jest wąskie gardło. (W ostatnich latach system Windows jest dostarczany z coraz bardziej zaawansowanymi aplikacjami do profilowania i monitorowania, dostępnymi w Win 7 jako para Menedżer zadań / Monitor zasobów, i oczywiście wiele podobnych aplikacji jest dostępnych również dla innych systemów operacyjnych.) Wiele systemów jest konfigurowanych automatycznie lub można skonfigurować, aby buforować odczyt dysku i zapisywanie w pamięci RAM przez krótki czas. Buforowanie działa prawie tak samo jak dysk RAM, ale prawdopodobnie jest nawet szybsze: oprogramowanie myśli, że zapisuje pliki pośrednie na dysk, ale system operacyjny najpierw zapisuje je tymczasowo do pamięci RAM, nie uzyskując dostępu do dysku, w nadziei, że wkrótce te same dane zostaną odczytane i usunięte, w takim przypadku fizyczny zapis nigdy nie będzie konieczny.
Biorąc pod uwagę ilość obliczeń potrzebnych do obliczenia pełnej widoczności (w naiwnym algorytmie każda komórka musi zostać sprawdzona pod kątem widoczności raz dla każdego punktu widzenia), należy przynajmniej podejrzewać, że problem może stanowić prędkość obliczeniowa, a nie dyskowe operacje we / wy. tutaj. W takim przypadku dyski RAM lub dyski SSD będą stratą czasu i pieniędzy. Zamiast tego należy skoncentrować wysiłki na analizie i ulepszeniu podstawowego algorytmu .
W innym wątku pojawiła się dyskusja na temat tego, czy wydajność dysku RAM pomaga ArcGIS .
źródło
Niestety nie można ustawić IRasterAnalysisEnvironment do pracy z obszarem roboczym w pamięci.
Ten wątek rozwiązuje ten problem.
źródło