Lưu ý: Mặc dù câu hỏi này có câu trả lời, nhưng bất kỳ mẹo nào khác để tối ưu hóa quy trình con trỏ sẽ được đánh giá rất cao. Tôi sẽ theo dõi cho bất kỳ cập nhật.
Hiện tại, ông chủ của tôi (người làm việc ở Avenue) và tôi (làm việc trong Python) đều đang cố gắng giải quyết cùng một vấn đề. Thay vào đó, cả hai chúng tôi đã giải quyết nó, nhưng tốc độ mà các giải pháp của chúng tôi hoạt động là ... rời rạc, để nói rằng ít nhất. Những gì kịch bản của anh ấy xử lý trong 2 giờ có thể khiến tôi mất tới 6. Sự khác biệt thực sự duy nhất về cú pháp và cách triển khai trong logic đến từ Bitmap 3.x và Con trỏ của 10.x. Cả hai chúng tôi:
1) Lưu trữ các giá trị từ Bảng 1.
2) Sử dụng các giá trị đó để truy vấn một hàng trong Bảng 2.
3) Lưu trữ các giá trị từ Bảng 2 để chèn vào Bảng 3 dưới dạng một hàng mới.
Trong cả hai tập lệnh, các quy trình này được hoàn thành trong hai vòng lặp lồng nhau. Trước khi tôi bắt đầu đào sâu vào thế giới tối ưu hóa mã tuyệt vời, đây có phải là sự xuất hiện dự kiến khi so sánh hiệu suất tập lệnh Avenue với Python không? Đây không phải là lần đầu tiên các kịch bản của anh ấy vượt trội so với thời gian hoạt động của tôi, vì vậy tôi muốn biết liệu có điều gì tôi nên biết trước khi tôi đóng đinh chính mình vì kịch bản khủng khiếp.
Đây là kịch bản của tôi sans bit ngoại lai:
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)
EDIT : Cho một số ý kiến cho đến nay, tôi tự hỏi liệu có thể có cách nào tốt hơn để thực hiện điều này thông qua các phép nối hay không, mặc dù tôi nghi ngờ về kích thước của brobdingnagian (từ trong ngày!) Của các bảng. Trọng tâm của quá trình xử lý là nối thông tin từ một bảng vào bất kỳ bản ghi khớp nào trong bảng thứ hai và tạo bảng thứ ba chỉ chứa các trường quan trọng. Tôi muốn thử điều này bằng SDE, nhưng dường như đó không phải là một tùy chọn có sẵn. Suy nghĩ? Tôi xin lỗi nếu các câu hỏi của tôi luôn có liên quan , nhưng tôi đang cố gắng tìm đến tận cùng của sự khó chịu từ lâu.
Đã trả lời : Chỉ riêng đề xuất đơn giản của Jakub đã giảm thời gian xử lý từ 30 giây trên 500 hồ sơ xuống còn 3 giây trên 500 hồ sơ. Khởi tạo lại con trỏ chèn trên mỗi lần chèn làm chậm đáng kể (rõ ràng). Mặc dù điều này có thể không phải là tối ưu hóa nhất mà người ta có thể làm cho quá trình này khi áp dụng tốc độ của ArcView 3.x, nhưng nó là đủ cho mục đích của tôi tại thời điểm này. Đề xuất thêm rất được chào đón!