88#endregion
99
1010using System ;
11+ using System . Runtime . CompilerServices ;
1112using BenchmarkDotNet . Attributes ;
1213
1314namespace Hyperion . Benchmarks
@@ -20,9 +21,25 @@ public class SerializeClassesBenchmark : HyperionBenchmark
2021 private LargeSealedClass sealedObject ;
2122 private GenericClass < int , string , bool , DateTime , Guid > genericObject ;
2223
24+ private Serializer _filteredSerializer ;
25+
2326 protected override void Init ( )
2427 {
25- Serializer = new Serializer ( new SerializerOptions ( preserveObjectReferences : true ) ) ;
28+ var baseOptions = new SerializerOptions ( preserveObjectReferences : true ) ;
29+ Serializer = new Serializer ( baseOptions ) ;
30+
31+ var filteredOptions = baseOptions
32+ . WithTypeFilter (
33+ TypeFilterBuilder . Create ( )
34+ . Include < CyclicClassA > ( )
35+ . Include < CyclicClassB > ( )
36+ . Include < VirtualTestClass > ( )
37+ . Include < LargeSealedClass > ( )
38+ . Include < GenericClass < int , string , bool , DateTime , Guid > > ( )
39+ . Include < TestEnum > ( )
40+ . Build ( ) ) ;
41+ _filteredSerializer = new Serializer ( filteredOptions ) ;
42+
2643 var a = new CyclicClassA ( ) ;
2744 var b = new CyclicClassB ( ) ;
2845 a . B = b ;
@@ -45,9 +62,23 @@ protected override void Init()
4562 #endregion
4663
4764 [ Benchmark ] public void Cyclic_References ( ) => SerializeAndDeserialize ( cyclic ) ;
65+ [ Benchmark ] public void Filtered_Cyclic_References ( ) => SerializeAndFilteredDeserialize ( cyclic ) ;
4866 [ Benchmark ] public void Virtual_Classes ( ) => SerializeAndDeserialize ( virtualObject ) ;
67+ [ Benchmark ] public void Filtered_Virtual_Classes ( ) => SerializeAndFilteredDeserialize ( virtualObject ) ;
4968 [ Benchmark ] public void Large_Sealed_Classes ( ) => SerializeAndDeserialize ( sealedObject ) ;
69+ [ Benchmark ] public void Filtered_Large_Sealed_Classes ( ) => SerializeAndFilteredDeserialize ( sealedObject ) ;
5070 [ Benchmark ] public void Generic_Classes ( ) => SerializeAndDeserialize ( genericObject ) ;
71+ [ Benchmark ] public void Filtered_Generic_Classes ( ) => SerializeAndFilteredDeserialize ( genericObject ) ;
72+
73+ [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
74+ private void SerializeAndFilteredDeserialize < T > ( T elem )
75+ {
76+ Serializer . Serialize ( elem , Stream ) ;
77+ Stream . Position = 0 ;
78+
79+ _filteredSerializer . Deserialize < T > ( Stream ) ;
80+ Stream . Position = 0 ;
81+ }
5182 }
5283
5384 #region test data types
0 commit comments