Not: Bu sorunun bir cevabı olsa da, bir imleç sürecini optimize etmek için başka ipuçları da çok takdir edilecektir. Herhangi bir güncellemeyi izleyeceğim.
Şu anda patronum (Avenue'da çalışan) ve ben (Python'da çalışan) aynı sorunu çözmeye çalışıyorlar. Aksine, ikisini de çözdük, ama çözümlerimizin çalışma hızı ... en azından, ayrıktır. Senaryosunun 2 saat içinde işleyişi 6'ya kadar sürebilir. Sözdizimi ve mantıktaki uygulamadaki tek gerçek fark 3.x'in Bitmap'leri ve 10.x'in İmleçlerinden gelir. İkimiz de:
1) Tablo 1'deki değerleri saklayın.
2) Tablo 2'deki bir satırı sorgulamak için bu değerleri kullanın.
3) Tablo 3'teki değerleri yeni bir satır olarak Tablo 3'e eklemek için saklayın.
Her iki komut dosyasında da bu işlemler iki iç içe döngüde tamamlanır. Kod optimizasyonu harika dünyasına kazmaya başlamadan önce, bu Avenue komut dosyası performansını Python ile karşılaştırırken beklenen bir olay mı? Bu, senaryolarının çalışma süresi açısından ilk kez benimkinden daha iyi performans göstermediği için, korkunç senaryo için kendimi çarmıha germeden önce bilmem gereken bir şey olup olmadığını bilmek istiyorum.
İşte benim script sans bit bitleri:
import arcpy
import time
import sys
import os
def recordfindcopy(inFile,query,outFile):
findRecord = arcpy.SearchCursor(inFile,query)
for record in findRecord:
copyRecord = arcpy.InsertCursor(outData) # <--- D'oh! (See answer)
field = record.FIELD
copy = copyRecord.newRow()
copy.FIELD = field
copyRecord.insertRow(copy)
StreetsFileList = [r"Path",
r"Path"]
for sfile in StreetsFileList:
inStreets = sfile
inTable = r"Path"
outData = r"Path"
fsaEntry = arcpy.SearchCursor(inTable)
for row in fsaEntry:
id = row.ID
sQuery = "ID = %s " % (str(id))
recordfindcopy(inStreets,sQuery,outData)
DÜZENLEME : Şimdiye kadar bazı yorumlar göz önüne alındığında, tablolar brobdingnagian (günün sözcüğü!) Boyutu göz önüne alındığında şüpheli olmasına rağmen, birleştirmeler yoluyla bunu yapmak için daha iyi bir yolu olup olmadığını merak ediyorum. İşlemenin kalbi, bir tablodan ikinci bir tablodaki eşleşen kayıtlara bilgi eklemek ve yalnızca önemli alanları içeren üçüncü bir tablo oluşturmaktır. SDE kullanarak denemek istedim, ancak bu kullanılabilir bir seçenek gibi görünmüyor. Düşünceler? Sorularım hep böyle eğer özür dilerim dahil , ama uzun süredir sıkıntı altına almaya çalışıyorum.
Cevap : Jakub'un basit önerisi tek başına işlem süresini 500 kayıt başına 30 saniyeden 500 kayıt başına 3 saniyeye düşürdü . Ekleme imlecini her ek üzerinde yeniden başlatmak işleri (yavaşça) önemli ölçüde yavaşlattı. Bu, ArcView 3.x'in hızına karşı koyulduğunda bu işlem için yapılabilecek en iyi optimizasyon olmasa da, şu anda benim amacım için yeterli. Diğer öneriler çok açıktır!