Tôi đã viết tập lệnh này đệ quy qua tất cả các lớp đối tượng trong một tập hợp các bộ dữ liệu tính năng nhất định và xóa tất cả các tính năng của chúng. Nó xuất hiện để thực hiện công việc nhưng nó chạy khá chậm. Có bất cứ điều gì tôi đang làm sai ở đây hoặc có bất kỳ cách rõ ràng để tăng tốc mọi thứ?
Tôi đang sử dụng DeleteFeatures_man quản lý để thực hiện hành động. DeleteRows_man quản lý dường như cũng hoạt động.
import sys
import os
import arcpy
from arcpy import env
import datetime
import getpass
try:
passwd = getpass.getpass("Enter the sde user password: ")
sdeConnectionFileDir = os.environ.get("TEMP")
databaseName = ""
fileName = "temp.sde"
# Delete any pre-existing SDE connection file.
fullPath = sdeConnectionFileDir + '\\' + fileName
if os.path.exists(fullPath):
os.remove(fullPath)
# Create temporary SDE connection file.
arcpy.CreateArcSDEConnectionFile_management (
sdeConnectionFileDir, fileName,
"sdeserver", "5151", "",
"DATABASE_AUTH", "my_sde_user", passwd,
"SAVE_USERNAME", "SDE.DEFAULT", "SAVE_VERSION"
)
env.workspace = fullPath
# ArcPy status codes.
returnCodes = {'WARN' : 0, 'INFO' : 1, 'ERROR' : 2}
featureDatasets = []
featureDatasets.extend(arcpy.ListDatasets("dataset1*"))
featureDatasets.extend(arcpy.ListDatasets("dataset2*"))
featureDatasets.extend(arcpy.ListDatasets("dataset3*"))
list = '[%s]' % ', '.join(map(str, featureDatasets))
response = raw_input("\n***** WARNING!!! ***** \nAll data will be deleted from all feature classess in the following datasets: \n\n" + list + "\n\n |--> Type DELETE to begin removal: ")
if response == "DELETE":
print "\nStarted: " + str(datetime.datetime.now()) + "\n"
for dataset in featureDatasets:
print "Processing dataset: " + dataset
for fc in arcpy.ListFeatureClasses("*", "ALL", dataset):
rowCount = int(arcpy.GetCount_management(fc).getOutput(0))
if rowCount > 0:
print " -- Processing feature class: " + str(fc) + " (" + str(rowCount) + " rows)"
#arcpy.DeleteRows_management(fc)
arcpy.DeleteFeatures_management(fc)
print "\nCompleted: " + str(datetime.datetime.now())
except Exception as e:
if arcpy:
arcpyErrors = arcpy.gp.getMessages(returnCodes['ERROR'])
if arcpyErrors:
sys.stderr.write(arcpyErrors + "\n")
sys.stderr.write(str(e) + "\n")
sys.exit(1)
CHỈNH SỬA -
Tôi đặt một số bộ định thời hiệu suất trong tập lệnh và đây là dữ liệu:
- Thời gian để truy xuất bộ dữ liệu: 0: 00: 01.254000
- Tổng số lớp tính năng: 1682
- Tổng số lớp tính năng với dữ liệu: 124
- Tổng số tính năng được xử lý: 190222
- Tổng thời gian chạy : 3 giờ, 16 phút
Sự phá vỡ:
Tập dữ liệu tính năng -> liệt kê các cuộc gọi lớp tính năng:
* AVG 0:00:02
* MIN 0:00:01
* MAX 0:00:07
* COUNT 40
* TOTAL 0:01:08
Cuộc gọi đếm tính năng (phần lớn thời gian):
* AVG 0:00:06
* MIN 0:00:01
* MAX 0:00:16
* COUNT 1682
* TOTAL 2:41:00
Các cuộc gọi xóa tính năng (giảm vì chỉ các lớp tính năng có hàng được xử lý):
* AVG 0:00:17
* MIN 0:00:02
* MAX 0:03:22
* COUNT 124
* TOTAL 0:34:31