andreatos 发表于 2022-7-6 22:03:46

WblockClon​eObjects memory not

Hi,
i need to read an external dwg and import only some entities.
I use WblockCloneObjects, it work fine but i found a memory problem, the memory is not disposed autocad memory process significantly increases after every WblockCloneObjects.
 
Where is the problem?
 
Thank you very much.

       public void TestClone()       {         // repeated 20 times to highlight the memory consumption         for (int i = 0; i < 20; i++)         {               ObjectIdCollection filteredIds = new ObjectIdCollection();               Database targetDb = ACAP.Application.DocumentManager.MdiActiveDocument​.Database;                              using (Transaction trMain = targetDb.TransactionManager.StartTransaction())               {                   using (Database db = new Database(false, true))                   {                     // read the source dwg                     db.ReadDwgFile(@"D:\he10t.dwg", FileOpenMode.OpenForReadAndAllShare, true, "");                                              // get all entities                     using (Transaction trSource = db.TransactionManager.StartTransaction())                     {                           BlockTable pBT = (BlockTable)trSource.GetObject(db.BlockTableId, OpenMode.ForRead, false);                           BlockTableRecord pBTR = (BlockTableRecord)trSource.GetObject(pBT, OpenMode.ForRead, false);                           foreach (ObjectId id in pBTR)                           {                               // ...open entity and filter                               filteredIds.Add(id);                           }                     }                     // clone the filtered entities in current document                     using (ACAP.DocumentLock dl = ACAP.Application.DocumentManager.MdiActiveDocument​.LockDocument())                     {                           using (IdMapping mapping = new IdMapping())                           {                               // now clone the objects into the destdb                               ObjectId destDbMsId = SymbolUtilityServices.GetBlockModelSpaceId(targetD​b);                               db.WblockCloneObjects(filteredIds, destDbMsId, mapping, DuplicateRecordCloning.Replace, false);                           }                     }                   }                   trMain.Commit();               }                   filteredIds.Dispose();         }                  }
页: [1]
查看完整版本: WblockClon​eObjects memory not