class Cast
{
[CommandMethod("tes")]
public void Test1()
{
Document doc = acadApp.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
PromptEntityResult per = ed.GetEntity("\nSelect a curve: ");
if (per.Status != PromptStatus.OK) return;
ObjectId id = per.ObjectId;
Polyline pl;
ed.WriteMessage("\nYou selected a " + id.ObjectClass.DxfName);
long start = DateTime.Now.Ticks;
for (int i = 0; i < 10000; i++)
{
using (Transaction tr = db.TransactionManager.StartTransaction())
{
pl = tr.GetObject(id, OpenMode.ForRead) as Polyline;
if (pl == null)
{
tr.Commit();
continue;
}
tr.Commit();
}
}
ed.WriteMessage("\nAs test ellapsed time ="
+ ((DateTime.Now.Ticks - start) / 1000).ToString());
//use this only if you pick a polyline
//start = DateTime.Now.Ticks;
//for (int i = 0; i < 10000; i++)
//{
// using (Transaction tr = db.TransactionManager.StartTransaction())
// {
// pl = (Polyline)tr.GetObject(id, OpenMode.ForRead);
// tr.Commit();
// }
//}
//ed.WriteMessage("\nDirect test ellapsed time ="
// + ((DateTime.Now.Ticks - start) / 1000).ToString());
pl = null;
start = DateTime.Now.Ticks;
for (int i = 0; i < 10000; i++)
{
using (Transaction tr = db.TransactionManager.StartTransaction())
{
Entity ent = tr.GetObject(id, OpenMode.ForRead) as Entity;
if (ent is Polyline)
pl = tr.GetObject(id, OpenMode.ForRead) as Polyline;
tr.Commit();
}
}
ed.WriteMessage("\nIs test using as method ellapsed time ="
+ ((DateTime.Now.Ticks - start) / 1000).ToString());
start = DateTime.Now.Ticks;
for (int i = 0; i < 10000; i++)
{
using (Transaction tr = db.TransactionManager.StartTransaction())
{
Entity ent = tr.GetObject(id, OpenMode.ForRead) as Entity;
if (ent is Polyline)
pl = (Polyline)tr.GetObject(id, OpenMode.ForRead);
tr.Commit();
}
}
ed.WriteMessage("\nIs test using direct cast method ellapsed time ="
+ ((DateTime.Now.Ticks - start) / 1000).ToString());
start = DateTime.Now.Ticks;
for (int i = 0; i < 10000; i++)
{
using (Transaction tr = db.TransactionManager.StartTransaction())
{
if(id.ObjectClass==RXClass.GetClass(typeof( Polyline)))
pl =(Polyline) tr.GetObject(id, OpenMode.ForRead);
tr.Commit();
}
}
ed.WriteMessage("\ndirect cast using id., ellapsed time ="
+ ((DateTime.Now.Ticks - start) / 1000).ToString());
start = DateTime.Now.Ticks;
RXClass plineClass = RXClass.GetClass(typeof(Polyline));
for (int i = 0; i < 10000; i++)
{
using (Transaction tr = db.TransactionManager.StartTransaction())
{
if (id.ObjectClass == plineClass)
pl = (Polyline)tr.GetObject(id, OpenMode.ForRead);
tr.Commit();
}
}
ed.WriteMessage("\ndirect cast using pre dimmed class, ellapsed time ="
+ ((DateTime.Now.Ticks - start) / 1000).ToString());
start = DateTime.Now.Ticks;
for (int i = 0; i < 10000; i++)
{
using (Transaction tr = db.TransactionManager.StartTransaction())
{
if (id.ObjectClass == plineClass)
pl = tr.GetObject(id, OpenMode.ForRead)as Polyline;
tr.Commit();
}
}
ed.WriteMessage("\nAs cast using pre dimmed class, ellapsed time ="
+ ((DateTime.Now.Ticks - start) / 1000).ToString());
start = DateTime.Now.Ticks;
for (int i = 0; i < 10000; i++)
{
using (Transaction tr = db.TransactionManager.StartTransaction())
{
if (id.ObjectClass.Name == "AcDbPolyline")
pl = (Polyline)tr.GetObject(id, OpenMode.ForRead);
tr.Commit();
}
}
ed.WriteMessage("\ndirect cast using id string comparison, ellapsed time ="
+ ((DateTime.Now.Ticks - start) / 1000).ToString());
start = DateTime.Now.Ticks;
for (int i = 0; i < 10000; i++)
{
using (Transaction tr = db.TransactionManager.StartTransaction())
{
if (id.ObjectClass.Name == "AcDbPolyline")
pl = tr.GetObject(id, OpenMode.ForRead) as Polyline;
tr.Commit();
}
}
ed.WriteMessage("\nAs cast using id string comparison, ellapsed time ="
+ ((DateTime.Now.Ticks - start) / 1000).ToString());
start = DateTime.Now.Ticks;
for (int i = 0; i < 10000; i++)
{
using (Transaction tr = db.TransactionManager.StartTransaction())
{
if (id.ObjectClass.DxfName == "LWPOLYLINE")
pl = tr.GetObject(id, OpenMode.ForRead) as Polyline;
tr.Commit();
}
}
ed.WriteMessage("\nAs cast using id dxf string comparison, ellapsed time ="
+ ((DateTime.Now.Ticks - start) / 1000).ToString());
} //end Test1
} //End Cast