public static IEnumerable <Tuple <string, int> > GetSizes(Session session, JET_DBID db) { int dbPages; Api.JetGetDatabaseInfo(session, db, out dbPages, JET_DbInfo.Filesize); var dbTotalSize = dbPages * SystemParameters.DatabasePageSize; yield return(Tuple.Create("Total db size: " + DatabaseSize.Humane(dbTotalSize), dbTotalSize)); foreach (var tableName in Api.GetTableNames(session, db)) { using (var tbl = new Table(session, db, tableName, OpenTableGrbit.None)) { Api.JetComputeStats(session, tbl); JET_OBJECTINFO result; Api.JetGetTableInfo(session, tbl, out result, JET_TblInfo.Default); var sb = new StringBuilder(tableName).AppendLine(); var usedSize = result.cPage * SystemParameters.DatabasePageSize; int ownedPages; Api.JetGetTableInfo(session, tbl, out ownedPages, JET_TblInfo.SpaceOwned); sb.Append("\tOwned Size: ") .Append(DatabaseSize.Humane(ownedPages * SystemParameters.DatabasePageSize)) .AppendLine(); sb.Append("\tUsed Size: ") .Append(DatabaseSize.Humane(usedSize)) .AppendLine(); sb.Append("\tRecords: ").AppendFormat("{0:#,#;;0}", result.cRecord).AppendLine(); sb.Append("\tIndexes:").AppendLine(); foreach (var index in Api.GetTableIndexes(session, tbl)) { sb.Append("\t\t") .Append(index.Name) .Append(": ") .Append(DatabaseSize.Humane(index.Pages * (SystemParameters.DatabasePageSize))) .AppendLine(); } yield return(Tuple.Create(sb.ToString(), ownedPages * SystemParameters.DatabasePageSize)); } } }