Let's create a small example to test batch messaging mode behavior. We will use bulk insert with and without batch messaging configuration.
01private static void FillUpDb(IConfiguration configuration) 02
{ 03
IObjectContainer container = Db4oFactory.OpenClient(configuration, Host, Port, User, 04
Password); 05
try 06
{ 07
Console.WriteLine("Testing inserts"); 08
DateTime dt1 = DateTime.UtcNow; 09
for (int i = 0; i < NoOfObjects; i++) 10
{ 11
Pilot pilot = new Pilot("pilot #" + i, i); 12
container.Set(pilot); 13
} 14
DateTime dt2 = DateTime.UtcNow; 15
TimeSpan diff = dt2 - dt1; 16
Console.WriteLine("Operation time: " + diff.Milliseconds + " ms."); 17
} 18
finally 19
{ 20
container.Close(); 21
} 22
}
01Private Shared Sub FillUpDb(ByVal configuration As IConfiguration) 02
Dim container As IObjectContainer = Db4oFactory.OpenClient(configuration, Host, Port, User, Password) 03
Try 04
Console.WriteLine("Testing inserts") 05
Dim dt1 As DateTime = DateTime.UtcNow 06
Dim i As Integer = 0 07
While i < NoOfObjects 08
Dim pilot As Pilot = New Pilot("pilot #" + i.ToString(), i) 09
container.Set(pilot) 10
System.Math.Min(System.Threading.Interlocked.Increment(i), i - 1) 11
End While 12
Dim dt2 As DateTime = DateTime.UtcNow 13
Dim diff As TimeSpan = dt2 - dt1 14
Console.WriteLine("Operation time: " + diff.Milliseconds.ToString() + " ms.") 15
Finally 16
container.Close() 17
End Try 18
End Sub
Let's configure the server and run the insert operation first without batch messages, then with batch messages:
01public static void Main(string[] Args) 02
{ 03
IObjectServer db4oServer = Db4oFactory.OpenServer(Db4oFileName, Port); 04
try 05
{ 06
db4oServer.GrantAccess(User, Password); 07
IConfiguration configuration = Db4oFactory.NewConfiguration(); 08
FillUpDb(configuration); 09
configuration.ClientServer().BatchMessages(true); 10
FillUpDb(configuration); 11
} 12
finally 13
{ 14
db4oServer.Close(); 15
} 16
}
01Public Shared Sub Main(ByVal Args As String()) 02
Dim db4oServer As IObjectServer = Db4oFactory.OpenServer(File, Port) 03
Try 04
db4oServer.GrantAccess(User, Password) 05
Dim configuration As IConfiguration = Db4oFactory.NewConfiguration() 06
FillUpDb(configuration) 07
configuration.ClientServer.BatchMessages(True) 08
FillUpDb(configuration) 09
Finally 10
db4oServer.Close() 11
End Try 12
End Sub
You can try different values of NO_OF_OBJECTS
constant to see the difference.
If the value of NO_OF_OBJECTS
is high
(>1,000,000) you may notice that the memory consumption increases a lot. In
order to decrease it, try using:
c#:
container.Ext().Configure().ClientServer().MaxBatchQueueSize(size);
VB:
container.Ext().Configure().ClientServer().MaxBatchQueueSize(size);
Specify the size parameter according to the desirable memory consumption limit.