Как видно и транзакция то не нужна...
Для 2008 это увы не так. метода ObjectClass у ObjectId нет. Соответственно приходится получить объект, а затем вызывать GetRXClass() объекта.
А я вынужден писать универсальный код. А так вы правы, будет быстрее, за счет уменьшения количества медленных методов tr.GetObject(id...)
Я использую свои доп классы для подключения к БД и управления транзакцией, но надеюсь смысл понятен из кода
using (DbConnection dwg = new DbConnection(DbFlag.Current))
{
List<BlockTableRecord> blocks = dwg.GetBlocks(OpenMode.ForRead, false);
RXClass dbText = RXClass.GetClass(typeof(DBText));
int AttrCount = 0;
Stopwatch timer1 = new Stopwatch();
timer1.Start();
foreach (BlockTableRecord block in blocks)
{
foreach (ObjectId id in block)
{
DBObject obj = dwg.GetObject(id, OpenMode.ForWrite, false, true);
if (obj.GetRXClass() == dbText) AttrCount++;
}
}
timer1.Stop();
long seconds = timer1.ElapsedMilliseconds;
Logger.WriteMessage("Считано атрибутов-{0}/время-{1}", AttrCount, seconds);
}