หมายเหตุ: ในขณะที่คำถามนี้มีคำตอบเคล็ดลับเพิ่มเติมใด ๆ สำหรับการปรับกระบวนการเคอร์เซอร์ให้เหมาะสมจะได้รับการชื่นชมอย่างมาก ฉันจะตรวจสอบการอัปเดตใด ๆ
ปัจจุบันเจ้านายของฉัน (ที่ทำงานในอเวนิว) และฉัน (ทำงานใน Python) กำลังพยายามแก้ปัญหาเดียวกัน แต่เราทั้งคู่แก้ไขมันได้ แต่ความเร็วที่โซลูชันของเราดำเนินการคือ ... ไม่เชื่อมโยงกันเพื่อพูดอย่างน้อยที่สุด สิ่งที่กระบวนการสคริปต์ของเขาใน 2 ชั่วโมงสามารถขุดได้ถึง 6 ความแตกต่างที่แท้จริงของไวยากรณ์และการใช้งานในตรรกะนั้นมาจาก Bitmaps ของ 3.x และ Cursors 10.x เราทั้งคู่:
1) จัดเก็บค่าจากตารางที่ 1
2) ใช้ค่าเหล่านั้นเพื่อค้นหาแถวในตารางที่ 2
3) จัดเก็บค่าจากตารางที่ 2 สำหรับการแทรกลงในตารางที่ 3 เป็นแถวใหม่
ในสคริปต์ทั้งสองกระบวนการเหล่านี้จะเสร็จสมบูรณ์ในสองลูปซ้อนกัน ก่อนที่ฉันจะเริ่มขุดสู่โลกมหัศจรรย์ของการเพิ่มประสิทธิภาพโค้ดนี่เป็นเหตุการณ์ที่คาดหวังเมื่อเปรียบเทียบประสิทธิภาพสคริปต์ของ Avenue กับ Python หรือไม่ นี่ไม่ใช่ครั้งแรกที่สคริปต์ของเขามีประสิทธิภาพสูงกว่าฉันอย่างมากในแง่ของเวลาในการทำงานดังนั้นฉันอยากรู้ว่ามีบางสิ่งที่ฉันควรทราบก่อนที่ฉันจะตรึงตัวเองเพื่อสคริปต์ที่น่ากลัว
นี่คือสคริปต์ของฉันมีบิตที่ไม่เกี่ยวข้อง:
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)
แก้ไข : ได้รับความคิดเห็นบางส่วนจนถึงขณะนี้ฉันสงสัยว่าอาจจะมีวิธีที่ดีกว่าในการทำเช่นนี้ผ่านการเข้าร่วมแม้ว่าฉันจะสงสัยว่าจะได้รับขนาด brobdingnagian (คำพูดประจำวัน!) ของตาราง หัวใจของการประมวลผลคือการผนวกข้อมูลจากตารางหนึ่งไปยังระเบียนที่ตรงกันในตารางที่สองและสร้างตารางที่สามที่มีเขตข้อมูลที่สำคัญเท่านั้น ฉันต้องการลองใช้ SDE แต่ดูเหมือนจะไม่เป็นตัวเลือกที่ใช้ได้ คิด? ฉันขอโทษถ้าคำถามของฉันมีส่วนเกี่ยวข้องอยู่เสมอแต่ฉันพยายามไปที่จุดต่ำสุดของการรบกวนที่ยาวนาน
ตอบแล้ว : คำแนะนำง่ายๆของ Jakub เพียงอย่างเดียวลดเวลาในการประมวลผลจาก30วินาทีต่อ 500 บันทึกเป็น3วินาทีต่อ 500 บันทึก การเริ่มเคอร์เซอร์แทรกใหม่บนทุกเม็ดมีผลทำให้สิ่งต่าง ๆ ช้าลงอย่างเห็นได้ชัด (ชัด) แม้ว่านี่อาจไม่ใช่การปรับให้เหมาะสมที่สุดที่เราสามารถทำได้สำหรับกระบวนการนี้เมื่อเทียบกับความเร็วของ ArcView 3.x แต่ก็เพียงพอสำหรับวัตถุประสงค์ของฉันในเวลานี้ คำแนะนำเพิ่มเติมยินดีต้อนรับมาก!