नोट: जबकि इस प्रश्न का उत्तर है, कर्सर प्रक्रिया के अनुकूलन के लिए किसी भी अन्य सुझाव की बहुत सराहना की जाएगी। मैं किसी भी अपडेट के लिए निगरानी रखूंगा।
वर्तमान में, मेरे बॉस (एवेन्यू में काम करते हैं) और मैं (पायथन में काम कर रहे) दोनों एक ही समस्या को हल करने का प्रयास कर रहे हैं। बल्कि, हम दोनों ने इसे हल कर लिया है, लेकिन जिस गति से हमारे समाधान संचालित होते हैं ... कम से कम कहने के लिए, निराश हैं। 2 घंटे में उसकी स्क्रिप्ट प्रक्रियाएं मुझे 6 तक ले जा सकती हैं। वाक्यविन्यास और तर्क में कार्यान्वयन का एकमात्र वास्तविक अंतर 3.x के बिटमैप्स और 10.x के कर्सर से आता है। हम दोनों:
1) तालिका 1 से स्टोर मान।
2) तालिका 2 में एक पंक्ति को क्वेरी करने के लिए उन मानों का उपयोग करें।
3) एक नई पंक्ति के रूप में तालिका 3 में प्रविष्टि के लिए तालिका 2 से स्टोर मान।
दोनों लिपियों में, इन प्रक्रियाओं को दो नेस्टेड छोरों में पूरा किया जाता है। इससे पहले कि मैं कोड अनुकूलन की अद्भुत दुनिया में खुदाई करना शुरू करूं, क्या एवेन्यू स्क्रिप्ट के प्रदर्शन की तुलना पायथन से करना एक अपेक्षित घटना है? यह पहली बार नहीं है जब उनकी लिपियों ने ऑपरेशन के समय के संदर्भ में मेरा बहुत बेहतर प्रदर्शन किया है, इसलिए मैं यह जानना चाहूंगा कि क्या कोई ऐसी चीज है जिसके बारे में मुझे पता होना चाहिए इससे पहले कि मैं खुद को डरावनी स्क्रिप्टिंग के लिए क्रूस पर चढ़ाऊं।
यहाँ मेरी स्क्रिप्ट बाहरी बिट्स है:
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)
संपादित करें : अब तक की कुछ टिप्पणियों को देखते हुए, मुझे आश्चर्य है कि अगर जॉन्स के माध्यम से ऐसा करने का एक बेहतर तरीका हो सकता है, हालांकि मुझे टेबल के आकार के ब्रबडिंगनागियन (दिन का शब्द!) को देखते हुए संदिग्ध है। प्रसंस्करण का दिल एक टेबल से दूसरी मिलान में किसी भी मिलान रिकॉर्ड की जानकारी संलग्न करना और केवल महत्वपूर्ण क्षेत्रों से युक्त एक तीसरी तालिका बनाना है। मैं एसडीई का उपयोग करके यह कोशिश करना चाहता था, लेकिन यह एक उपलब्ध विकल्प नहीं प्रतीत होता है। विचार? मैं माफी मांगता हूं अगर मेरे सवाल हमेशा शामिल होते हैं , लेकिन मैं लंबे समय से चली आ रही झुंझलाहट की तह तक जाने की कोशिश कर रहा हूं।
उत्तर दिया गया : अकेले याकूब के सरल सुझाव ने प्रसंस्करण समय को 30 सेकंड प्रति 500 रिकॉर्ड से घटाकर 3 सेकंड प्रति 500 रिकॉर्ड कर दिया। हर डालने पर सम्मिलित कर्सर को फिर से शुरू करना, चीजों को धीमा कर देता है (स्पष्ट रूप से)। हालांकि यह इस प्रक्रिया के लिए सबसे अधिक अनुकूलन नहीं हो सकता है जब आर्कव्यू 3.x की गति के खिलाफ रखा जाता है, यह इस समय मेरे उद्देश्यों के लिए पर्याप्त है। आगे के सुझावों का बहुत स्वागत है!