Skip to content

Bad Performance on first Power.From() call in .netCore #1126

Open

Description

@JeCodeFu

Description
The very first call on Power.From takes up to several seconds.
All the following calls are fine (regarding the performance).

Environment

  • .net Core 3.1
  • 32bit ARM Platform
  • Embedded Linux

Repro/Code
var result = Power.From(5, PowerUnit.Watt);

Expected behavior
The call should return within milliseconds, but it takes up to more than 10 seconds.

Additional context
I Experienced this issue after updating from Version 4.72.0 to Version 4.144.0.
It did not happen in the older version.

Activity

  1. angularsen commented on Sep 8, 2022

    @angularsen
    Owner

    Hi, this is a known issue: #965

    Due to a large number of types and type members for all our 100+ quantities and 1000+ units, the JIT spends a long time on the initial usages.

    We don't currently have a solution to this, but a few ideas have been floated:

    • Break up into core nuget + specific quantity nugets. Only add what you need.
    • Switch from struct to class to make use of inheritance
    • Make use of extension methods more to avoid duplicating methods for every N quantities
    • .NET 7 brings AOT, maybe applications can make use of that to speed up JIT?
  2. Jens88 commented on Sep 14, 2022

    @Jens88

    Hi
    Thank you for the answer and the ideas how to deal with this.
    I did not read all the release notes between V4.72.0 and V4.144.0.
    But since you mentioned the large number of types and type members is the causing this issue;

    Did you add a lot of new types after V4.72.0?

    I know i run on a "low power" cpu and thus i cannot compare my time measurement with all the benchmark tests done listed in issue #965. But the difference between the two versions i mentioned is a factor of 100 times slower (or even more).
    So this makes me think that there is yet another problem, unless you did add hundreds of types after V4.72.

  3. angularsen commented on Oct 31, 2022

    @angularsen
    Owner

    @Jens88 I'm not sure, we added a bunch of units for sure, but 100x sounds a lot.

    Are you able to profile the difference between the two? Maybe find what exact hotspot in the code differs between them. Maybe we have introduced some regression.

    There was one known performance regression, but it should have been fixed in 4.142.0.
    #1069 (comment)

  4. stale commented on Jun 18, 2023

    @stale

    This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

  5. added a commit that references this issue on Jun 18, 2023
    37ada11
  6. angularsen commented on Jul 11, 2023

    @angularsen
    Owner

    @JeCodeFu Long overdue, but I think this improved a lot in v5, plus some recent improvements in #1210.

    Could you give it another go?

    I can't replicate the extreme slowness you reported though, since you were testing on ARM32 and I'm testing on a fast computer:

    The very first call on Power.From takes up to several seconds.

    Maybe the application complexity and size also affects how much work JIT needs to do for UnitsNet.

    Benchmark

    Comparing 4.144.0 with latest v5.

    Using TimeItSharp to run a net7.0 console app with this code:

    Console.WriteLine(Power.From(5, PowerUnit.Watt));

    Results

    Before: 850 ms
    After: 523 ms

    This includes the overhead of starting and running the console app. The idea was to capture any slowness in the JIT.

    Before (v4.144.0)

    For some reason this crashed the timeit tool, so I had to run fewer iterations on this nuget.

    (ins)$ dotnet timeit perf_before.json
    TimeIt (v. 0.0.8.0) by Tony Redondo
    
    Warmup count: 5
    Count: 10
    Number of Scenarios: 1
    Exporters: ConsoleExporter, JsonExporter, Datadog
    
    Scenario: Default
      Warming up .....
        Duration: 4,2442191s
      Run ..........
        Duration: 8,4839588s
    
    Name Mean StdDev StdErr Min Max P95 P90 Outliers
    Default 843,5567ms 5,356ms 1,6937ms 835,3823ms 850,371ms 850,371ms 849,9721ms 0
    ├>process.internal_duration_ms 800,9216 4,920471 1,55599 794,7264 809,472 809,472 808,57088 0
    ├>process.time_to_end_ms 16,29339 1,85835 0,587662 14,0489 18,4476 18,4476 18,429853 0
    ├>process.time_to_start_ms 26,34177 0,316539 0,100098 25,8493 26,8823 26,8823 26,781357 0
    ├>runtime.dotnet.cpu.percent 4,483375 0,18614 0,058862 4,246667 4,766667 4,766667 4,734889 0
    ├>runtime.dotnet.cpu.system 203,385417 47,298275 14,957028 125 270,833333 270,833333 257,465278 0
    ├>runtime.dotnet.cpu.user 874,348958 35,224503 11,138966 820,3125 916,666667 916,666667 916,666667 0
    ├>runtime.dotnet.mem.committed 17316024,32 222527,309147 70369,313849 17165516,8 17899008 17899008 17734553,6 0
    ├>runtime.dotnet.threads.contention_count 0 0 0 0 0 0 0 0
    ├>runtime.dotnet.threads.contention_time 0 0 0 0 0 0 0 0
    ├>runtime.dotnet.threads.count 12,8025 0,00527 0,001667 12,8 12,8125 12,8125 12,8125 0
    └>runtime.dotnet.threads.workers_count 1,8725 0,004025 0,001273 1,866667 1,875 1,875 1,875 0

    After (v5)

    (ins)$ dotnet timeit perf.json
    TimeIt (v. 0.0.8.0) by Tony Redondo
    
    Warmup count: 10
    Count: 20
    Number of Scenarios: 1
    Exporters: ConsoleExporter, JsonExporter, Datadog
    
    Scenario: Default
      Warming up ..........
        Duration: 5,3425719s
      Run ....................
        Duration: 10,5619372s
    
    Name Mean StdDev StdErr Min Max P95 P90 Outliers
    Default 523,2774ms 3,2313ms 0,7413ms 516,9314ms 530,2838ms 529,344ms 526,9549ms 1
    ├>process.internal_duration_ms 482,944 3,098095 0,692755 476,3648 488,96 488,81664 487,461547 0
    ├>process.time_to_end_ms 14,252445 0,355083 0,079399 13,5538 14,7657 14,76206 14,751633 0
    ├>process.time_to_start_ms 26,380142 0,389723 0,089408 25,8933 27,1318 27,09361 26,988073 0
    ├>runtime.dotnet.cpu.percent 4,203333 0,317501 0,070995 3,755556 4,766667 4,766667 4,713704 0
    ├>runtime.dotnet.cpu.system 161,458333 77,457144 17,319944 34,722222 312,5 300,347222 277,777778 0
    ├>runtime.dotnet.cpu.user 848,958333 66,145126 14,7905 694,444444 937,5 937,5 924,768519 0
    ├>runtime.dotnet.mem.committed 17302459,733333 115220,946958 25764,186983 17084871,111111 17476266,666667 17454603,377778 17412702,814815 0
    ├>runtime.dotnet.threads.contention_count 0 0 0 0 0 0 0 0
    ├>runtime.dotnet.threads.contention_time 0 0 0 0 0 0 0 0
    ├>runtime.dotnet.threads.count 12,666667 0 0 12,666667 12,666667 12,666667 12,666667 0
    └>runtime.dotnet.threads.workers_count 1,777778 0 0 1,777778 1,777778 1,777778 1,777778 0
  7. angularsen commented on Jul 11, 2023

    @angularsen
    Owner

    @tmilnthorp Some benchmarks posted above, can't spot much different in v5 versions in this simple test setup, but significantly faster than v4.

  8. Jens88 commented on Jul 11, 2023

    @Jens88

    Hi Andreas

    Thanks for the update on this issue. Since we went back in version we had no actual suffer anymore.

    I quickly tested the newest version. Unfortunately all the "Undefined" entities vanished, so my code needs some adaption to get back running again. I will come back to this thread when I converted the code and have a test setup again.

  9. Jens88 commented on Jul 11, 2023

    @Jens88

    So now the measurement of the very first call of Power.From() call:

    V4.72 : 633ms
    V4.144: 17256ms (this was the version i reported here)
    V5.21 : 9121 ms

    So to summarize:

    • Yes there is an improvement from Version 4.144
    • But the issue is not solved yet, since compared with the V4.72 there is still an increase of 8'488ms (factor 15 slower)
  10. angularsen commented on Jul 11, 2023

    @angularsen
    Owner

    cc @tmilnthorp

    Thanks for reporting back and testing again.

    Clearly we did something between 4.72 and 4.144 to make the JIT choke hard on this platform, that is still not fixed in v5.

    I don't have much time to profile and look into this anytime soon, but I did run PerfView to get the JITStats for our 3 sample apps:

    • PerfTests\PerfTest_Startup_v4_72_0
    • PerfTests\PerfTest_Startup_v4_144_0
    • PerfTests\PerfTest_Startup

    Summary of JIT durations

    What v4.72 [ms / count] v4.144 [ms / count] latest [ms / count]
    Quantity static .cctor() 0 19 1
    Static ctors of ~120 quantity types 0 57 70
    UnitAbbreviationsCache..cctor() 43 0 0
    UnitConverter.RegisterDefaultConversions 0 84 108
    UnitConverter.SetConversionFunction 0 26 26
    QuantityInfo 2 ms / 21 71 ms / 940 52 ms / 500
    UnitInfo 0 ms / 6 11 ms / 240 15 ms / 240
    Quantity.GetQuantityTypes (new) 0 0 51
    ...HashSet`1[UnitsNet.Units...] 1 135 0
    System.Linq 2 180 25
    Other 18 152 79
    Total 78 ms 872 ms 470 ms

    Take-aways

    The main difference in 4.72 from 4.144 and latest:

    • A lot less JITing (140 compilations vs 8000 and 4000 compilations)
    • Fewer generics, latest has a lot of variants in QuantityInfo, SetConversionFunction and various dictionaries/collection types
    • Fewer invoked static constructors .cctor(); only Power, QuantityInfo, QuantityFormatter, BaseUnits, UnitAbbreviationsCache. In v4.144 and latest it invokes ALL 120 quantity static constructors even if only Power is used.

    If we can avoid invoking all static ctors for all 120 quantities, we should be able to improve this.
    I'm not sure how much we can reduce the use of generics, it has some real benefits, but maybe there are some redundancies here.

    PerfView data

    Raw data here:
    PerfViewData_UnitsNet_comparison_4.72_4.144_latest.xlsx

    4.72

    image
    image

    4.144

    image
    image

    Latest

    image
    image

  11. Anthonywolfe commented on Apr 16, 2024

    @Anthonywolfe
    Contributor

    Hi, I want to throw in some performance metrics I've measured on my Arm64 device.

    Environment:

    • .NET 8
    • Xilinx Zynq UltraScale+ MPSoC (ARM64)
    • Linux 6.1.30-xilinx-v2023.2 aarch64
    • UnitsNet 5.50.0

    Due to some shenanigans I end up loading 4 instances of UnitsNet using a AssemblyLoadContext, Though that's outside of the scope of this issue and I'm just bringing it up to explain why RegisterDefaultConversions shows up 4 times in the below image.

    Here are some measurements I got from DotTrace I'm still a bit new to this tool so if there is any more in-depth info you'd like me to grab I can.

    image

    Stacktrace
        100%   RegisterDefaultConversions  •  3,723 ms  •  UnitsNet.UnitConverter.RegisterDefaultConversions(UnitConverter)
        44.9%   [JIT]  •  1,671 ms
        1.32%   [Unknown]  •  49 ms
      ► 1.21%   RegisterDefaultConversions  •  45 ms  •  UnitsNet.ForcePerLength.RegisterDefaultConversions(UnitConverter)
      ► 0.82%   RegisterDefaultConversions  •  31 ms  •  UnitsNet.Density.RegisterDefaultConversions(UnitConverter)
      ► 0.82%   RegisterDefaultConversions  •  31 ms  •  UnitsNet.PowerDensity.RegisterDefaultConversions(UnitConverter)
      ► 0.66%   RegisterDefaultConversions  •  25 ms  •  UnitsNet.VolumeFlow.RegisterDefaultConversions(UnitConverter)
      ► 0.65%   RegisterDefaultConversions  •  24 ms  •  UnitsNet.Length.RegisterDefaultConversions(UnitConverter)
      ► 0.65%   RegisterDefaultConversions  •  24 ms  •  UnitsNet.MassConcentration.RegisterDefaultConversions(UnitConverter)
      ► 0.62%   RegisterDefaultConversions  •  23 ms  •  UnitsNet.AbsorbedDoseOfIonizingRadiation.RegisterDefaultConversions(UnitConverter)
      ► 0.60%   RegisterDefaultConversions  •  22 ms  •  UnitsNet.Volume.RegisterDefaultConversions(UnitConverter)
      ► 0.60%   RegisterDefaultConversions  •  22 ms  •  UnitsNet.Pressure.RegisterDefaultConversions(UnitConverter)
      ► 0.59%   RegisterDefaultConversions  •  22 ms  •  UnitsNet.Power.RegisterDefaultConversions(UnitConverter)
      ► 0.59%   RegisterDefaultConversions  •  22 ms  •  UnitsNet.Speed.RegisterDefaultConversions(UnitConverter)
      ► 0.59%   RegisterDefaultConversions  •  22 ms  •  UnitsNet.Energy.RegisterDefaultConversions(UnitConverter)
      ► 0.55%   RegisterDefaultConversions  •  21 ms  •  UnitsNet.ElectricPotentialChangeRate.RegisterDefaultConversions(UnitConverter)
      ► 0.54%   RegisterDefaultConversions  •  20 ms  •  UnitsNet.AmountOfSubstance.RegisterDefaultConversions(UnitConverter)
      ► 0.53%   RegisterDefaultConversions  •  20 ms  •  UnitsNet.Mass.RegisterDefaultConversions(UnitConverter)
      ► 0.53%   RegisterDefaultConversions  •  20 ms  •  UnitsNet.BitRate.RegisterDefaultConversions(UnitConverter)
      ► 0.52%   RegisterDefaultConversions  •  19 ms  •  UnitsNet.Acceleration.RegisterDefaultConversions(UnitConverter)
      ► 0.48%   RegisterDefaultConversions  •  18 ms  •  UnitsNet.Radioactivity.RegisterDefaultConversions(UnitConverter)
      ► 0.47%   RegisterDefaultConversions  •  18 ms  •  UnitsNet.MassFlow.RegisterDefaultConversions(UnitConverter)
      ► 0.47%   RegisterDefaultConversions  •  17 ms  •  UnitsNet.Jerk.RegisterDefaultConversions(UnitConverter)
      ► 0.47%   RegisterDefaultConversions  •  17 ms  •  UnitsNet.RotationalStiffness.RegisterDefaultConversions(UnitConverter)
      ► 0.47%   RegisterDefaultConversions  •  17 ms  •  UnitsNet.CoefficientOfThermalExpansion.RegisterDefaultConversions(UnitConverter)
      ► 0.46%   RegisterDefaultConversions  •  17 ms  •  UnitsNet.PressureChangeRate.RegisterDefaultConversions(UnitConverter)
      ► 0.46%   RegisterDefaultConversions  •  17 ms  •  UnitsNet.Area.RegisterDefaultConversions(UnitConverter)
      ► 0.46%   RegisterDefaultConversions  •  17 ms  •  UnitsNet.Temperature.RegisterDefaultConversions(UnitConverter)
      ► 0.45%   RegisterDefaultConversions  •  17 ms  •  UnitsNet.SpecificEnergy.RegisterDefaultConversions(UnitConverter)
      ► 0.45%   RegisterDefaultConversions  •  17 ms  •  UnitsNet.LinearPowerDensity.RegisterDefaultConversions(UnitConverter)
      ► 0.45%   RegisterDefaultConversions  •  17 ms  •  UnitsNet.VolumeConcentration.RegisterDefaultConversions(UnitConverter)
      ► 0.45%   RegisterDefaultConversions  •  17 ms  •  UnitsNet.PorousMediumPermeability.RegisterDefaultConversions(UnitConverter)
      ► 0.45%   RegisterDefaultConversions  •  17 ms  •  UnitsNet.AreaMomentOfInertia.RegisterDefaultConversions(UnitConverter)
      ► 0.45%   RegisterDefaultConversions  •  17 ms  •  UnitsNet.MassFraction.RegisterDefaultConversions(UnitConverter)
      ► 0.44%   RegisterDefaultConversions  •  16 ms  •  UnitsNet.ElectricCurrentGradient.RegisterDefaultConversions(UnitConverter)
      ► 0.44%   RegisterDefaultConversions  •  16 ms  •  UnitsNet.MassMomentOfInertia.RegisterDefaultConversions(UnitConverter)
      ► 0.43%   RegisterDefaultConversions  •  16 ms  •  UnitsNet.Torque.RegisterDefaultConversions(UnitConverter)
      ► 0.43%   RegisterDefaultConversions  •  16 ms  •  UnitsNet.Capacitance.RegisterDefaultConversions(UnitConverter)
      ► 0.43%   RegisterDefaultConversions  •  16 ms  •  UnitsNet.RadiationEquivalentDose.RegisterDefaultConversions(UnitConverter)
      ► 0.43%   RegisterDefaultConversions  •  16 ms  •  UnitsNet.MassFlux.RegisterDefaultConversions(UnitConverter)
      ► 0.43%   RegisterDefaultConversions  •  16 ms  •  UnitsNet.MolarMass.RegisterDefaultConversions(UnitConverter)
      ► 0.43%   RegisterDefaultConversions  •  16 ms  •  UnitsNet.SpecificWeight.RegisterDefaultConversions(UnitConverter)
      ► 0.43%   RegisterDefaultConversions  •  16 ms  •  UnitsNet.MolarFlow.RegisterDefaultConversions(UnitConverter)
      ► 0.42%   RegisterDefaultConversions  •  16 ms  •  UnitsNet.Force.RegisterDefaultConversions(UnitConverter)
      ► 0.42%   RegisterDefaultConversions  •  16 ms  •  UnitsNet.Permittivity.RegisterDefaultConversions(UnitConverter)
      ► 0.42%   RegisterDefaultConversions  •  16 ms  •  UnitsNet.ReactiveEnergy.RegisterDefaultConversions(UnitConverter)
      ► 0.42%   RegisterDefaultConversions  •  16 ms  •  UnitsNet.TorquePerLength.RegisterDefaultConversions(UnitConverter)
      ► 0.42%   RegisterDefaultConversions  •  16 ms  •  UnitsNet.HeatFlux.RegisterDefaultConversions(UnitConverter)
      ► 0.42%   RegisterDefaultConversions  •  16 ms  •  UnitsNet.Information.RegisterDefaultConversions(UnitConverter)
      ► 0.42%   RegisterDefaultConversions  •  16 ms  •  UnitsNet.ElectricCurrentDensity.RegisterDefaultConversions(UnitConverter)
      ► 0.42%   RegisterDefaultConversions  •  16 ms  •  UnitsNet.WarpingMomentOfInertia.RegisterDefaultConversions(UnitConverter)
      ► 0.42%   RegisterDefaultConversions  •  16 ms  •  UnitsNet.StandardVolumeFlow.RegisterDefaultConversions(UnitConverter)
      ► 0.42%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.VolumetricHeatCapacity.RegisterDefaultConversions(UnitConverter)
      ► 0.42%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.ApparentEnergy.RegisterDefaultConversions(UnitConverter)
      ► 0.42%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.RadiationExposure.RegisterDefaultConversions(UnitConverter)
      ► 0.41%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.Duration.RegisterDefaultConversions(UnitConverter)
      ► 0.41%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.Luminance.RegisterDefaultConversions(UnitConverter)
      ► 0.41%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.Irradiation.RegisterDefaultConversions(UnitConverter)
      ► 0.41%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.Angle.RegisterDefaultConversions(UnitConverter)
      ► 0.41%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.RotationalSpeed.RegisterDefaultConversions(UnitConverter)
      ► 0.41%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.VolumePerLength.RegisterDefaultConversions(UnitConverter)
      ► 0.41%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.Molarity.RegisterDefaultConversions(UnitConverter)
      ► 0.41%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.RotationalAcceleration.RegisterDefaultConversions(UnitConverter)
      ► 0.41%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.AreaDensity.RegisterDefaultConversions(UnitConverter)
      ► 0.41%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.Irradiance.RegisterDefaultConversions(UnitConverter)
      ► 0.41%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.Impulse.RegisterDefaultConversions(UnitConverter)
      ► 0.41%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.Frequency.RegisterDefaultConversions(UnitConverter)
      ► 0.40%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.ForceChangeRate.RegisterDefaultConversions(UnitConverter)
      ► 0.40%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.LinearDensity.RegisterDefaultConversions(UnitConverter)
      ► 0.40%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.ElectricResistivity.RegisterDefaultConversions(UnitConverter)
      ► 0.40%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.TemperatureChangeRate.RegisterDefaultConversions(UnitConverter)
      ► 0.40%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.ElectricCharge.RegisterDefaultConversions(UnitConverter)
      ► 0.40%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.ElectricPotentialDc.RegisterDefaultConversions(UnitConverter)
      ► 0.40%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.EnergyDensity.RegisterDefaultConversions(UnitConverter)
      ► 0.40%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.ThermalResistance.RegisterDefaultConversions(UnitConverter)
      ► 0.39%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.Luminosity.RegisterDefaultConversions(UnitConverter)
      ► 0.39%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.TemperatureGradient.RegisterDefaultConversions(UnitConverter)
      ► 0.39%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.VolumeFlowPerArea.RegisterDefaultConversions(UnitConverter)
      ► 0.39%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.TemperatureDelta.RegisterDefaultConversions(UnitConverter)
      ► 0.39%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.Turbidity.RegisterDefaultConversions(UnitConverter)
      ► 0.39%   RegisterDefaultConversions  •  15 ms  •  UnitsNet.ReciprocalArea.RegisterDefaultConversions(UnitConverter)
      ► 0.39%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.ElectricChargeDensity.RegisterDefaultConversions(UnitConverter)
      ► 0.39%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.SpecificEntropy.RegisterDefaultConversions(UnitConverter)
      ► 0.39%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.Scalar.RegisterDefaultConversions(UnitConverter)
      ► 0.38%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.KinematicViscosity.RegisterDefaultConversions(UnitConverter)
      ► 0.38%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.ReciprocalLength.RegisterDefaultConversions(UnitConverter)
      ► 0.38%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.ElectricPotentialAc.RegisterDefaultConversions(UnitConverter)
      ► 0.38%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.ElectricConductivity.RegisterDefaultConversions(UnitConverter)
      ► 0.38%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.ReactivePower.RegisterDefaultConversions(UnitConverter)
      ► 0.38%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.MolarEntropy.RegisterDefaultConversions(UnitConverter)
      ► 0.38%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.ElectricResistance.RegisterDefaultConversions(UnitConverter)
      ► 0.38%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.SpecificVolume.RegisterDefaultConversions(UnitConverter)
      ► 0.38%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.ApparentPower.RegisterDefaultConversions(UnitConverter)
      ► 0.38%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.AmplitudeRatio.RegisterDefaultConversions(UnitConverter)
      ► 0.37%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.LeakRate.RegisterDefaultConversions(UnitConverter)
      ► 0.37%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.Illuminance.RegisterDefaultConversions(UnitConverter)
      ► 0.37%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.SolidAngle.RegisterDefaultConversions(UnitConverter)
      ► 0.37%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.Compressibility.RegisterDefaultConversions(UnitConverter)
      ► 0.37%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.DynamicViscosity.RegisterDefaultConversions(UnitConverter)
      ► 0.37%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.ThermalConductivity.RegisterDefaultConversions(UnitConverter)
      ► 0.37%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.Ratio.RegisterDefaultConversions(UnitConverter)
      ► 0.37%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.ElectricCurrent.RegisterDefaultConversions(UnitConverter)
      ► 0.37%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.RotationalStiffnessPerLength.RegisterDefaultConversions(UnitConverter)
      ► 0.37%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.Entropy.RegisterDefaultConversions(UnitConverter)
      ► 0.36%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.ElectricSurfaceChargeDensity.RegisterDefaultConversions(UnitConverter)
      ► 0.36%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.Molality.RegisterDefaultConversions(UnitConverter)
      ► 0.36%   RegisterDefaultConversions  •  14 ms  •  UnitsNet.Magnetization.RegisterDefaultConversions(UnitConverter)
      ► 0.36%   RegisterDefaultConversions  •  13 ms  •  UnitsNet.MagneticFlux.RegisterDefaultConversions(UnitConverter)
      ► 0.36%   RegisterDefaultConversions  •  13 ms  •  UnitsNet.RatioChangeRate.RegisterDefaultConversions(UnitConverter)
      ► 0.36%   RegisterDefaultConversions  •  13 ms  •  UnitsNet.SpecificFuelConsumption.RegisterDefaultConversions(UnitConverter)
      ► 0.36%   RegisterDefaultConversions  •  13 ms  •  UnitsNet.HeatTransferCoefficient.RegisterDefaultConversions(UnitConverter)
      ► 0.36%   RegisterDefaultConversions  •  13 ms  •  UnitsNet.ElectricInductance.RegisterDefaultConversions(UnitConverter)
      ► 0.36%   RegisterDefaultConversions  •  13 ms  •  UnitsNet.MagneticField.RegisterDefaultConversions(UnitConverter)
      ► 0.36%   RegisterDefaultConversions  •  13 ms  •  UnitsNet.MolarEnergy.RegisterDefaultConversions(UnitConverter)
      ► 0.35%   RegisterDefaultConversions  •  13 ms  •  UnitsNet.ElectricConductance.RegisterDefaultConversions(UnitConverter)
      ► 0.35%   RegisterDefaultConversions  •  13 ms  •  UnitsNet.VitaminA.RegisterDefaultConversions(UnitConverter)
      ► 0.35%   RegisterDefaultConversions  •  13 ms  •  UnitsNet.Permeability.RegisterDefaultConversions(UnitConverter)
      ► 0.35%   RegisterDefaultConversions  •  13 ms  •  UnitsNet.ElectricField.RegisterDefaultConversions(UnitConverter)
      ► 0.35%   RegisterDefaultConversions  •  13 ms  •  UnitsNet.ElectricAdmittance.RegisterDefaultConversions(UnitConverter)
      ► 0.35%   RegisterDefaultConversions  •  13 ms  •  UnitsNet.LuminousIntensity.RegisterDefaultConversions(UnitConverter)
      ► 0.34%   RegisterDefaultConversions  •  13 ms  •  UnitsNet.Level.RegisterDefaultConversions(UnitConverter)
      ► 0.34%   RegisterDefaultConversions  •  13 ms  •  UnitsNet.FuelEfficiency.RegisterDefaultConversions(UnitConverter)
      ► 0.34%   RegisterDefaultConversions  •  13 ms  •  UnitsNet.LuminousFlux.RegisterDefaultConversions(UnitConverter)
      ► 0.34%   RegisterDefaultConversions  •  13 ms  •  UnitsNet.PowerRatio.RegisterDefaultConversions(UnitConverter)
      ► 0.34%   RegisterDefaultConversions  •  13 ms  •  UnitsNet.BrakeSpecificFuelConsumption.RegisterDefaultConversions(UnitConverter)
      ► 0.33%   RegisterDefaultConversions  •  12 ms  •  UnitsNet.RelativeHumidity.RegisterDefaultConversions(UnitConverter)
        0.26%   GetMemberList  •  9.8 ms  •  System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1.GetMemberList(MemberListType, String, CacheType)
        0.03%   InitializeCache  •  1.2 ms  •  System.RuntimeType.InitializeCache()
      ► <0.01%   GetQuantityTypes  •  0.3 ms  •  UnitsNet.Quantity.GetQuantityTypes()
    
  12. added
    pinnedIssues that should not be auto-closed due to inactivity.
    on Jul 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugpinnedIssues that should not be auto-closed due to inactivity.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions