Inherited objects are stored slower than simple objects. That is happening, because parent class indexes are created and stored to the database as well.
The following example shows the influence of a simple inheritance on the insert performance:
InsertPerformanceBenchmark.cs: RunInheritanceTest private void RunInheritanceTest() { Configure(); Init(); Clean(); System.Console.WriteLine("Storing " + _count + " objects of depth " + _depth); Open(); Store(); Close(); Clean(); System.Console.WriteLine("Storing " + _count + " inherited objects of depth " + _depth); Open(); StoreInherited(); Close(); }
InsertPerformanceBenchmark.cs: Configure private void Configure() { IConfiguration config = Db4oFactory.Configure(); config.LockDatabaseFile(false); config.WeakReferences(false); config.Io(new MemoryIoAdapter()); config.FlushFileBuffers(false); }
InsertPerformanceBenchmark.cs: Init private void Init() { _count = 10000; _depth = 3; _isClientServer = false; }
InsertPerformanceBenchmark.cs: Store private void Store() { StartTimer(); for (int i = 0; i < _count; i++) { Item item = new Item("load", null); for (int j = 1; j < _depth; j++) { item = new Item("load", item); } objectContainer.Store(item); } objectContainer.Commit(); StopTimer("Store " + TotalObjects() + " objects"); }
InsertPerformanceBenchmark.cs: StoreInherited private void StoreInherited() { StartTimer(); for (int i = 0; i < _count; i++) { ItemDerived item = new ItemDerived("load", null); for (int j = 1; j < _depth; j++) { item = new ItemDerived("load", item); } objectContainer.Store(item); } objectContainer.Commit(); StopTimer("Store " + TotalObjects() + " objects"); }
InsertPerformanceBenchmark.cs: ItemDerived public class ItemDerived : Item { public ItemDerived(String name, ItemDerived child) : base(name, child) { } }
The following results were achieved for the testing configuration:
.NET:
Storing 10000 objects of depth 3
Store 30000 objects: 1237ms
Storing 10000 inherited objects of depth 3
Store 30000 objects: 1699ms
Download example code: