Commit 82a00595 authored by Maksim Karpenko's avatar Maksim Karpenko Committed by Nick Craver

Add the eXpress Persistent Objects (XPO) benchmark (#1131)

parent ec194429
using BenchmarkDotNet.Attributes;
using System;
using System.Linq;
using System.ComponentModel;
using DevExpress.Xpo;
using DevExpress.Data.Filtering;
namespace Dapper.Tests.Performance
{
[Description("DevExpress.XPO")]
public class XpoBenchmarks : BenchmarkBase
{
public UnitOfWork _session;
[GlobalSetup]
public void Setup()
{
BaseSetup();
IDataLayer dataLayer = XpoDefault.GetDataLayer(_connection, DevExpress.Xpo.DB.AutoCreateOption.SchemaAlreadyExists);
dataLayer.Dictionary.GetDataStoreSchema(typeof(Xpo.Post));
_session = new UnitOfWork(dataLayer, dataLayer);
_session.IdentityMapBehavior = IdentityMapBehavior.Strong;
_session.TypesManager.EnsureIsTypedObjectValid();
}
[GlobalCleanup]
public void Cleanup()
{
_session.Dispose();
}
[Benchmark(Description = "GetObjectByKey<T>")]
public Xpo.Post GetObjectByKey()
{
Step();
return _session.GetObjectByKey<Xpo.Post>(i, true);
}
[Benchmark(Description = "FindObject<T>")]
public Xpo.Post FindObject()
{
Step();
CriteriaOperator _findCriteria = new BinaryOperator()
{
OperatorType = BinaryOperatorType.Equal,
LeftOperand = new OperandProperty("Id"),
RightOperand = new ConstantValue(i)
};
return _session.FindObject<Xpo.Post>(_findCriteria);
}
[Benchmark(Description = "Query<T>")]
public Xpo.Post Query()
{
Step();
return _session.Query<Xpo.Post>().First(p => p.Id == i);
}
}
}
......@@ -16,6 +16,7 @@
<PackageReference Include="Dashing.Weaver" Version="2.0.7" />
<PackageReference Include="Belgrade.Sql.Client" Version="1.1.4" />
<PackageReference Include="BenchmarkDotNet" Version="0.11.1" />
<PackageReference Include="DevExpress.Xpo" Version="18.1.6" />
<!--<PackageReference Include="BLToolkit" Version="4.3.6" />-->
<PackageReference Include="EntityFramework" Version="6.2.0" />
<PackageReference Include="FirebirdSql.Data.FirebirdClient" Version="6.3.0" />
......
......@@ -24,6 +24,9 @@
using Dashing;
using Microsoft.EntityFrameworkCore;
using Belgrade.SqlClient;
using DevExpress.Xpo;
using Dapper.Tests.Performance.Xpo;
using DevExpress.Data.Filtering;
namespace Dapper.Tests.Performance
{
......@@ -386,6 +389,30 @@ public async Task RunAsync(int iterations)
#endif
}, "Hand Coded");
// DevExpress.XPO
Try(() =>
{
IDataLayer dataLayer = XpoDefault.GetDataLayer(connection, DevExpress.Xpo.DB.AutoCreateOption.SchemaAlreadyExists);
dataLayer.Dictionary.GetDataStoreSchema(typeof(Xpo.Post));
UnitOfWork session = new UnitOfWork(dataLayer, dataLayer);
session.IdentityMapBehavior = IdentityMapBehavior.Strong;
session.TypesManager.EnsureIsTypedObjectValid();
tests.Add(id => session.Query<Xpo.Post>().First(p => p.Id == id), "DevExpress.XPO: Query<T>");
tests.Add(id => session.GetObjectByKey<Xpo.Post>(id, true), "DevExpress.XPO: GetObjectByKey<T>");
tests.Add(id =>
{
CriteriaOperator findCriteria = new BinaryOperator()
{
OperatorType = BinaryOperatorType.Equal,
LeftOperand = new OperandProperty("Id"),
RightOperand = new ConstantValue(id)
};
session.FindObject<Xpo.Post>(findCriteria);
}, "DevExpress.XPO: FindObject<T>");
}, "DevExpress.XPO");
// Subsonic isn't maintained anymore - doesn't import correctly
//Try(() =>
// {
......
using System;
using DevExpress.Xpo;
namespace Dapper.Tests.Performance.Xpo
{
[Persistent("Posts")]
public class Post : XPLiteObject
{
[Key(false)]
public int Id { get; set; }
public string Text { get; set; }
public DateTime CreationDate { get; set; }
public DateTime LastChangeDate { get; set; }
public int? Counter1 { get; set; }
public int? Counter2 { get; set; }
public int? Counter3 { get; set; }
public int? Counter4 { get; set; }
public int? Counter5 { get; set; }
public int? Counter6 { get; set; }
public int? Counter7 { get; set; }
public int? Counter8 { get; set; }
public int? Counter9 { get; set; }
public Post(Session session) : base(session) { }
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment