/// <summary> /// Warms up the specified types. If the <paramref name="types" /> is <c>null</c>, all types known /// in the <see cref="TypeCache" /> will be initialized. /// <para /> /// Note that it is not required to call this, but it can help to prevent an additional performance /// impact the first time a type is serialized. /// </summary> /// <param name="types">The types to warmp up. If <c>null</c>, all types will be initialized.</param> /// <param name="typesPerThread">The types per thread. If <c>-1</c>, all types will be initialized on the same thread.</param> public void Warmup(IEnumerable <Type> types, int typesPerThread = 1000) { ApiCop.UpdateRule <InitializationApiCopRule>("SerializerBase.WarmupAtStartup", x => x.SetInitializationMode(InitializationMode.Eager, GetType().GetSafeFullName(false))); if (types == null) { types = TypeCache.GetTypes(x => x.IsModelBase(), false); } var allTypes = new List <Type>(types); ParallelHelper.ExecuteInParallel(allTypes, type => { // General warmup SerializationManager.Warmup(type); // Specific (customized) warmup Warmup(type); }, typesPerThread, "warmup serializer for types"); }