Tôi đang sử dụng một ví dụ với 1 triệu điểm được tạo ngẫu nhiên bên trong cơ sở dữ liệu filegeodatabase. Đính kèm tại đây .
Đây là một số mã để chúng tôi bắt đầu:
import time
import arcpy
arcpy.env.workspace = "C:\CountTest.gdb"
time.sleep(5) # Let the cpu/ram calm before proceeding!
"""Method 1"""
StartTime = time.clock()
with arcpy.da.SearchCursor("RandomPoints", ["OBJECTID"]) as cursor:
rows = {row[0] for row in cursor}
count = 0
for row in rows:
count += 1
EndTime = time.clock()
print "Finished in %s seconds" % (EndTime - StartTime)
print "%s features" % count
time.sleep(5) # Let the cpu/ram calm before proceeding!
"""Method 2"""
StartTime2 = time.clock()
arcpy.MakeTableView_management("RandomPoints", "myTableView")
count = int(arcpy.GetCount_management("myTableView").getOutput(0))
EndTime2 = time.clock()
print "Finished in %s seconds" % (EndTime2 - StartTime2)
print "%s features" % count
Và một số kết quả ban đầu:
>>>
Finished in 6.75540050237 seconds
1000000 features
Finished in 0.801474780332 seconds
1000000 features
>>> =============================== RESTART ===============================
>>>
Finished in 6.56968596918 seconds
1000000 features
Finished in 0.812731769756 seconds
1000000 features
>>> =============================== RESTART ===============================
>>>
Finished in 6.58207512487 seconds
1000000 features
Finished in 0.841122157314 seconds
1000000 features
Hãy tưởng tượng bộ dữ liệu lớn hơn, phức tạp hơn. SearchCoder sẽ thu thập dữ liệu vô thời hạn.
Tôi hoàn toàn không hài lòng với kết quả này, tuy nhiên, mô-đun DataAccess đang được sử dụng rộng rãi trong vòng tròn phát triển GIS của chúng tôi. Tôi đang tìm cách xây dựng lại một số định nghĩa hàm của chúng tôi với mô-đun này vì nó linh hoạt hơn phương pháp MakeTableView + GetCount.