使用ITableSort可以对表进行排序,但是排序後如果用Row.Store()更新记录会非常慢。比较好的办法是先遍历排序表获得一个HashTable,然后从表通过Update方法获得一个可更新的ICursor,然后使用UpdateRow和Flush来更新。速度快很多。片段代码如下:
'提高效率的办法,不用.Store,首先获得一个OID,和顺序编号的HashTable
Dim IDHash As New Hashtable
Do While Not pRow Is Nothing
' Debug.Print(pRow.Value(XIndex) & " , " & pRow.Value(YIndex))
IDHash.Add(pRow.OID, ID)
ID += 1
' pRow.Store()
pRow = pCursor.NextRow
Loop
'然后更新!!
Dim UpdateCursor As ICursor = pTableSort.Table.Update(Nothing, False)
pRow = UpdateCursor.NextRow
Do Until pRow Is Nothing
If XOffset <> 0 Then pRow.Value(XIndex) = pRow.Value(XIndex) + XOffset
If YOffset <> 0 Then pRow.Value(YIndex) = pRow.Value(YIndex) + YOffset
MaxCol = Math.Max(MaxCol, pRow.Value(XIndex))
MaxRow = Math.Max(MaxRow, pRow.Value(YIndex))
pRow.Value(WASPIDIndex) = IDHash(pRow.OID)
UpdateCursor.UpdateRow(pRow)
pRow = UpdateCursor.NextRow
Loop
UpdateCursor.Flush()
(本文已被浏览 次) | | |