Configure db4o to use the custom marshaller for the Item class:
1private static IConfiguration ConfigureMarshaller(){ 2
marshaller = new ItemMarshaller(); 3
IConfiguration configuration = Db4oFactory.NewConfiguration(); 4
configuration.ObjectClass(typeof(Item)).MarshallWith(marshaller); 5
return configuration; 6
}
1Private Shared Function ConfigureMarshaller() As IConfiguration 2
Dim configuration As IConfiguration = Db4oFactory.NewConfiguration() 3
marshaller = New ItemMarshaller 4
configuration.ObjectClass(GetType(Item)).MarshallWith(marshaller) 5
Return configuration 6
End Function
01private static void StoreObjects(IConfiguration configuration) 02
{ 03
File.Delete(Db4oFileName); 04
IObjectContainer container = Db4oFactory.OpenFile(configuration, Db4oFileName); 05
try { 06
Item item; 07
DateTime dt1 = DateTime.UtcNow; 08
for (int i = 0; i < 50000; i++){ 09
item = new Item(0xFFAF, 0xFFFFFFF, 120); 10
container.Set(item); 11
} 12
DateTime dt2 = DateTime.UtcNow; 13
TimeSpan diff = dt2 - dt1; 14
System.Console.WriteLine("Time to store the objects ="+ diff.Milliseconds + " ms"); 15
} finally { 16
container.Close(); 17
} 18
}
01private static void RetrieveObjects(IConfiguration configuration) 02
{ 03
IObjectContainer container = Db4oFactory.OpenFile(configuration, Db4oFileName); 04
try { 05
IObjectSet result = container.Get(typeof(Item)); 06
DateTime dt1 = DateTime.UtcNow; 07
while (result.HasNext()) 08
{ 09
Item item = (Item)result.Next(); 10
} 11
DateTime dt2 = DateTime.UtcNow; 12
TimeSpan diff = dt2 - dt1; 13
System.Console.WriteLine("Time to read the objects =" + diff.Milliseconds + " ms"); 14
} finally { 15
container.Close(); 16
} 17
}
01Private Shared Sub StoreObjects(ByVal configuration As IConfiguration) 02
File.Delete(Db4oFileName) 03
Dim container As IObjectContainer = Db4oFactory.OpenFile(configuration, Db4oFileName) 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
01Private Shared Sub RetrieveObjects(ByVal configuration As IConfiguration) 02
Dim container As IObjectContainer = Db4oFactory.OpenFile(configuration, Db4oFileName) 03
Try 04
Dim dt1 As DateTime = DateTime.UtcNow 05
Dim result As IObjectSet = container.Get(GetType(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.