Insanely slow Automation Interface performance

I have a data model that I have defined 16 attachments to capture additional data about each table and 9 attachments to capture additional data about each column. I have a C# program that is using the Automation Interface to extract the table and column information (including the attachments) from the model. The logic is comparable to code we have that does the same thing against an ERWin data model. The code that reads from ER/Studio is extremely slower (literally over 400 times slower) than the code reading from ERWin. At this point it makes using ER/Studio unusable for our purposes and we may need to revert back to ERWin.

I am hoping someone out there has some ideas or suggestions for what we may be doing wrong in the use of ER/Studio's Automation Interface. I have simplified the code to show what is taking the time. The majority of the time is when it deals with the attachments. I am capturing the # of milliseconds spent iterating the table's attachments and a timer for the cumultaive # of milliseconds reading all column's attachments. Below is a snippet of the output. As you can see, even for a simple table with 4 columns it takes almost 3 seconds to iterate the column attachments. The ERwin code extracts all data for 1300 tables in a total of 30 seconds; so the ER/Studio time is extremely slow in comparison.

tAccessType: tableAttachments = 1717, columnAttachments = 2949, columnQty = 4
tACHParm: tableAttachments = 1604, columnAttachments = 16445, columnQty = 21
tACHPaymentFileStaging: tableAttachments = 1400, columnAttachments = 11528, columnQty = 14
tAcsryType: tableAttachments = 955, columnAttachments = 2545, columnQty = 4
tAddress: tableAttachments = 1457, columnAttachments = 24530, columnQty = 30
tAddressLineType: tableAttachments = 1375, columnAttachments = 2437, columnQty = 5
tAddressLineTypeLcl: tableAttachments = 1466, columnAttachments = 4261, columnQty = 6
tAddressRefType: tableAttachments = 1394, columnAttachments = 3352, columnQty = 6
tAddressRefTypeLcl: tableAttachments = 1394, columnAttachments = 4317, columnQty = 6
tAddressType: tableAttachments = 1406, columnAttachments = 1901, columnQty = 4
tAddrMatchErrType: tableAttachments = 1392, columnAttachments = 2465, columnQty = 4
tAddrXRef: tableAttachments = 990, columnAttachments = 6923, columnQty = 9
tAgcyAssist: tableAttachments = 1426, columnAttachments = 4090, columnQty = 6
tAgcyAssistPromType: tableAttachments = 1466, columnAttachments = 2128, columnQty = 4
tAggRdgIntvlRdg: tableAttachments = 1449, columnAttachments = 8457, columnQty = 11
tAggSvc: tableAttachments = 1480, columnAttachments = 8052, columnQty = 11

static void Main(string[] args)
{
ERStudio.IApplication idera = new ERStudio.Application();

idera.OpenFile(@"C:\abs\Open-cIS\Development\Current\Combined\Database\ABS_DataModel.dm1");

string topLevelModelName = "ABS";

ERStudio.Diagram diagram = idera.ActiveDiagram();
ERStudio.Model model = diagram.Models()[topLevelModelName];

Dictionary<String, object> attachments = new Dictionary<string, object>();

foreach (ERStudio.Entity entity in model.Entities())
{
String tableName = entity.TableName.ToString();

var sw = new System.Diagnostics.Stopwatch();
sw.Start();
attachments.Clear();
foreach (ERStudio.BoundAttachment a in entity.BoundAttachments())
{
attachments.Add(a.Attachment().Name, a.ValueCurrent);
}
sw.Stop();
var tableAttachments = sw.ElapsedMilliseconds;

Int32 columnQty = 1;
long columnAttachments = 0;

foreach (ERStudio.AttributeObj column in entity.Attributes())
{
sw.Restart();
attachments.Clear();
foreach (ERStudio.BoundAttachment a in column.BoundAttachments())
{
attachments.Add(a.Attachment().Name, a.ValueCurrent);
}

sw.Stop();
columnAttachments += sw.ElapsedMilliseconds;
columnQty++;
}

Console.WriteLine("{0}: tableAttachments = {1}, columnAttachments = {2}, columnQty = {3}", tableName, tableAttachments, columnAttachments, columnQty);
}
}