Тема: Чтение расширенных данных из VB

Может кто подскажет, как решить эту проблему? Есть такой код:

  .............
   Dim acadApp As AcadApplication
   Set acadApp = CreateObject ("AutoCAD.Application")
   acadApp.Documents.Open "C:\NEW\NASTR01.dwg")
   Set acadDoc = acadApp.ActiveDocument
   Dim entry As AcadEntity
   For Each entry In acadDoc.ModelSpace
     If entry.Layer = "MyLayer" Then
        entry.GetXData "", xtypeOut, xdataOut
         c_name = xdataOut(1)
         ......
    endif
   next

Все работает, но небольшой чертеж из 1.5 тыс. примитивов обрабатывает около минуты! И это на Пне 1.7 Ггц. Подскажите что здесь не так и, главное, как сделать правильно, ведь аналогичный код в ВБА работает доли секунды.

Re: Чтение расширенных данных из VB

Да не сделаешь ты его быстрее. А время на запуск акада ты учел?

Re: Чтение расширенных данных из VB

НЕ ПОЛЬЗУЙТЕСЬ В АКАДЕ ТИПИЧНО VBA-ШНЫМ ПРИЕМОМ - ПЕРЕБОРОМ КОЛЛЕКЦИЙ. "Внутри" это еще туда-сюда, но "снаружи"... В АКАДе есть для этого наборы объектов.

Dim objSelSet As AcadSelectionSet
Dim objEnt As AcadEntity
Dim intType(0 ) As Integer
Dim varData(0) As Variant
Dim i as Long
Set objSelSet = ThisDrawing.SelectionSets.Add("temp")
intType(0) = 8
varData(0)="MyLayer"
objSelSet.Select acSelectionSetAll, Filtertype:=intType, filterdata:=varData
For i=0 To objSelSet.Count-1
      Set objEnt=objSelSet.Item(i)
      'далее по тексту
Next

Re: Чтение расширенных данных из VB

> Сергей
От времени запуска действительно никуда не денешся, но проблема была в том, что долго отрабатывал именно цикл перебора примитивов.
> bender
ОГРОМНОЕ СПАСИБО!
Этот вариант работает несравнимо быстрее!

Re: Чтение расширенных данных из VB

Если не сложно, пожалуйста, сравните производительность и напишите.

Re: Чтение расширенных данных из VB

> bender
Если сравнить метод перебора примитивов и метод создания набора, то получается следующее: на одном и том же чертеже первый отрабатывает примерно за 40 секунд, второй работает около секунды!!!
НО! Столкнулся с такой непоняткой: при первом запуске программы все отрабатывает прекрасно. Но если на том же чертеже запускаю программу еще раз, то набор не создается - objSelSet = Nothing и как будто все расш. данные пустые.
Если закрою этот чертеж и открываю заново - первый запуск нормально, а дальше опять ерунда!
Подскажите в чем я неправ!

Re: Чтение расширенных данных из VB

Вопрос снимаю - забыл про метод objSelSet.Delete!