diff --git a/MergerLogic/Extensions/ServiceCollectionExtensions.cs b/MergerLogic/Extensions/ServiceCollectionExtensions.cs index e3eeda97..b5748a8c 100644 --- a/MergerLogic/Extensions/ServiceCollectionExtensions.cs +++ b/MergerLogic/Extensions/ServiceCollectionExtensions.cs @@ -26,6 +26,8 @@ public static class ServiceCollectionExtensions { public static IServiceCollection RegisterMergerLogicType(this IServiceCollection collection, bool includeServiceProvider = true) { + ConfigureImageMagick(); + if (includeServiceProvider) { collection = collection.RegisterServiceProvider(); @@ -48,6 +50,15 @@ public static IServiceCollection RegisterImageProcessors(this IServiceCollection .AddSingleton(); } + // Process-global ImageMagick tuning. Applied once at composition root, kept out of the DI + // registration methods so runtime side effects aren't hidden behind a "register services" call. + private static void ConfigureImageMagick() + { + // Tiles are already processed in parallel at the app level, so keep ImageMagick single-threaded + // per operation to avoid thread oversubscription. + ImageMagick.ResourceLimits.Thread = 1; + } + public static IServiceCollection RegisterMergerUtils(this IServiceCollection collection) { return collection diff --git a/MergerService/MergerService.csproj b/MergerService/MergerService.csproj index f495bdcd..c0131939 100644 --- a/MergerService/MergerService.csproj +++ b/MergerService/MergerService.csproj @@ -5,6 +5,9 @@ enable Linux $(MSBuildProjectDirectory) + + true + true