Try the Dwg.Database.Purge method. This will only work to purge out unused objects however. If you have a block used somewhere in the drawing the block will not be able to be purged. Here's a sub (havn't tried it, cut and pasted from an existing sub that does). It's missing setting a few variables. The code keeps looping until all items that can be purged have been.
Code:
Sub Purge()
Dim Layers As Autodesk.AutoCAD.DatabaseServices.LayerTable
Dim Blocks As Autodesk.AutoCAD.DatabaseServices.BlockTable
Dim TextStyles As Autodesk.AutoCAD.DatabaseServices.TextStyleTable
Dim LineTypes As Autodesk.AutoCAD.DatabaseServices.LinetypeTable
Dim ObjId As Autodesk.AutoCAD.DatabaseServices.ObjectId
Dim PurgeCollection As New Autodesk.AutoCAD.DatabaseServices.ObjectIdCollection
Dim NumberPurged(1) As Integer
Dim Database As Autodesk.AutoCAD.DatabaseServices.Database
Dim Trans As Autodesk.AutoCAD.DatabaseServices.Transaction
Do
' Update the layers so we can purge all the unused layers.
Layers.GenerateUsageData()
For Each ObjId In Blocks
PurgeCollection.Add(ObjId)
Next
For Each ObjId In Layers
PurgeCollection.Add(ObjId)
Next
For Each ObjId In TextStyles
PurgeCollection.Add(ObjId)
Next
For Each ObjId In LineTypes
PurgeCollection.Add(ObjId)
Next
Database.Purge(PurgeCollection)
NumberPurged(0) = PurgeCollection.Count
For Each ObjId In PurgeCollection
Dim Obj As AcadDb.DBObject = Trans.GetObject(ObjId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite, True, True)
Obj.Erase()
Next
' Check if there where more items purged from the last attempt or not.
If NumberPurged(0) = NumberPurged(1) Then
' No new items purged so we exit the loop.
Exit Do
Else
NumberPurged(1) = NumberPurged(0)
End If
Loop
End Sub