Custom Marshaller Usage

Configure db4o to use the custom marshaller for the Item class:

CustomMarshallerExample.cs: configureMarshaller
1private static void ConfigureMarshaller(){ 2 marshaller = new ItemMarshaller(); 3 Db4oFactory.Configure().ObjectClass(typeof(Item)).MarshallWith(marshaller); 4 }

CustomMarshallerExample.vb: configureMarshaller
1Private Shared Sub ConfigureMarshaller() 2 marshaller = New ItemMarshaller 3 Db4oFactory.Configure.ObjectClass(GetType(Item)).MarshallWith(marshaller) 4 End Sub

Now you can work with Item class objects just as usual:

CustomMarshallerExample.cs: storeObjects
01private static void StoreObjects(){ 02 File.Delete(DbFile); 03 IObjectContainer container = Db4oFactory.OpenFile(DbFile); 04 try { 05 Item item; 06 DateTime dt1 = DateTime.UtcNow; 07 for (int i = 0; i < 50000; i++){ 08 item = new Item(0xFFAF, 0xFFFFFFF, 120); 09 container.Set(item); 10 } 11 DateTime dt2 = DateTime.UtcNow; 12 TimeSpan diff = dt2 - dt1; 13 System.Console.WriteLine("Time to store the objects ="+ diff.Milliseconds + " ms"); 14 } finally { 15 container.Close(); 16 } 17 }

CustomMarshallerExample.cs: retrieveObjects
01private static void RetrieveObjects(){ 02 IObjectContainer container = Db4oFactory.OpenFile(DbFile); 03 try { 04 DateTime dt1 = DateTime.UtcNow; 05 IObjectSet result = container.Get(new Item()); 06 DateTime dt2 = DateTime.UtcNow; 07 TimeSpan diff = dt2 - dt1; 08 System.Console.WriteLine("Time elapsed for the query ="+ diff.Milliseconds + " ms"); 09 ListResult(result); 10 } finally { 11 container.Close(); 12 } 13 }

CustomMarshallerExample.vb: storeObjects
01Private Shared Sub StoreObjects() 02 File.Delete(DbFile) 03 Dim container As IObjectContainer = Db4oFactory.OpenFile(DbFile) 04 Try 05 Dim item As Item 06 Dim dt1 As DateTime = DateTime.UtcNow 07 Dim i As Integer = 0 08 While i < 500000 09 item = New Item(&HFFAF, &HFFFFFFA, 120) 10 container.Set(item) 11 System.Math.Min(System.Threading.Interlocked.Increment(i), i - 1) 12 End While 13 Dim dt2 As DateTime = DateTime.UtcNow 14 Dim diff As TimeSpan = dt2 - dt1 15 System.Console.WriteLine("Time to store the objects =" + diff.Milliseconds.ToString() + " ms") 16 Finally 17 container.Close() 18 End Try 19 End Sub

CustomMarshallerExample.vb: retrieveObjects
01Private Shared Sub RetrieveObjects() 02 Dim container As IObjectContainer = Db4oFactory.OpenFile(DbFile) 03 Try 04 Dim dt1 As DateTime = DateTime.UtcNow 05 Dim result As IObjectSet = container.Get(New Item) 06 Dim dt2 As DateTime = DateTime.UtcNow 07 Dim diff As TimeSpan = dt2 - dt1 08 System.Console.WriteLine("Time elapsed for the query =" + diff.Milliseconds.ToString() + " ms") 09 ListResult(result) 10 Finally 11 container.Close() 12 End Try 13 End Sub

Custom marshallers can help you to improve performance for selected classes if quering for fields is not required. The impact can be especially noticeable on bulk operations. It is recommended  to test the performance impact of a custom marshaller with your real application model.