You are here: Tuning > Main Operations Performance > Insert Performance > Inherited Objects

Inherited Objects

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:

c#