✨Set IsAotCompatible for net7.0 or later#1543
Conversation
- Add IsAotCompatible to UnitsNet - Added EnumHelpers which provides a way to get enum values independent of target platform - Replaced generation of `GetQuantityTypes` with `RegisterDefaultConversions` to avoid reflection - Add IsAotCompatible to UnitsNet.NumberExtensions - Add IsAotCompatible to UnitsNet.JsonNet
fdb3f93 to
ee4acd1
Compare
|
@angularsen I rebased on the current master - it was much easier due to the latest commits And, just for fun, I added a startup performance comparison :) Default startup performance (PerfTest_Startup): NativeAot compilation startup performance (PerfTest_Startup_Aot): |
@OleRoss I haven't been able to do my own aot-enabled publish (haven't installed the c++ stuff yet), but am very curious to see how the 🐲 version performs: if you got the time, could you please run it against this PR: #1544 |
|
@lipchev, sure, I played around with it, but had difficulties getting comparable results ... I ended up creating a benchmark class which starts a process and waits for completion: Between Run 1 and Run 2, I changed the order of the tests; Somehow, the tests seem to be affected by this, but I think the trend is clear. Apart from that, those are the results using timeitsharp (very inconsistent, just for completeness): |
|
This PR is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 7 days. |
|
This PR was automatically closed due to inactivity. |
…aot-compatible # Conflicts: # CodeGen/Generators/UnitsNetGen/QuantityGenerator.cs # CodeGen/Generators/UnitsNetGen/StaticQuantityGenerator.cs # UnitsNet/GeneratedCode/Quantities/AbsorbedDoseOfIonizingRadiation.g.cs # UnitsNet/GeneratedCode/Quantities/Acceleration.g.cs # UnitsNet/GeneratedCode/Quantities/AmountOfSubstance.g.cs # UnitsNet/GeneratedCode/Quantities/AmplitudeRatio.g.cs # UnitsNet/GeneratedCode/Quantities/Angle.g.cs # UnitsNet/GeneratedCode/Quantities/Area.g.cs # UnitsNet/GeneratedCode/Quantities/AreaDensity.g.cs # UnitsNet/GeneratedCode/Quantities/AreaMomentOfInertia.g.cs # UnitsNet/GeneratedCode/Quantities/BitRate.g.cs # UnitsNet/GeneratedCode/Quantities/BrakeSpecificFuelConsumption.g.cs # UnitsNet/GeneratedCode/Quantities/CoefficientOfThermalExpansion.g.cs # UnitsNet/GeneratedCode/Quantities/Compressibility.g.cs # UnitsNet/GeneratedCode/Quantities/Density.g.cs # UnitsNet/GeneratedCode/Quantities/DoseAreaProduct.g.cs # UnitsNet/GeneratedCode/Quantities/Duration.g.cs # UnitsNet/GeneratedCode/Quantities/DynamicViscosity.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricAdmittance.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricApparentEnergy.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricApparentPower.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricCapacitance.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricCharge.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricChargeDensity.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricConductance.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricConductivity.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricCurrent.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricCurrentDensity.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricCurrentGradient.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricField.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricImpedance.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricInductance.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricPotential.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricPotentialChangeRate.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricReactance.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricReactiveEnergy.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricReactivePower.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricResistance.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricResistivity.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricSurfaceChargeDensity.g.cs # UnitsNet/GeneratedCode/Quantities/ElectricSusceptance.g.cs # UnitsNet/GeneratedCode/Quantities/Energy.g.cs # UnitsNet/GeneratedCode/Quantities/EnergyDensity.g.cs # UnitsNet/GeneratedCode/Quantities/Entropy.g.cs # UnitsNet/GeneratedCode/Quantities/FluidResistance.g.cs # UnitsNet/GeneratedCode/Quantities/Force.g.cs # UnitsNet/GeneratedCode/Quantities/ForceChangeRate.g.cs # UnitsNet/GeneratedCode/Quantities/ForcePerLength.g.cs # UnitsNet/GeneratedCode/Quantities/Frequency.g.cs # UnitsNet/GeneratedCode/Quantities/FuelEfficiency.g.cs # UnitsNet/GeneratedCode/Quantities/HeatFlux.g.cs # UnitsNet/GeneratedCode/Quantities/HeatTransferCoefficient.g.cs # UnitsNet/GeneratedCode/Quantities/Illuminance.g.cs # UnitsNet/GeneratedCode/Quantities/Impulse.g.cs # UnitsNet/GeneratedCode/Quantities/Information.g.cs # UnitsNet/GeneratedCode/Quantities/Irradiance.g.cs # UnitsNet/GeneratedCode/Quantities/Irradiation.g.cs # UnitsNet/GeneratedCode/Quantities/Jerk.g.cs # UnitsNet/GeneratedCode/Quantities/KinematicViscosity.g.cs # UnitsNet/GeneratedCode/Quantities/LeakRate.g.cs # UnitsNet/GeneratedCode/Quantities/Length.g.cs # UnitsNet/GeneratedCode/Quantities/Level.g.cs # UnitsNet/GeneratedCode/Quantities/LinearDensity.g.cs # UnitsNet/GeneratedCode/Quantities/LinearPowerDensity.g.cs # UnitsNet/GeneratedCode/Quantities/Luminance.g.cs # UnitsNet/GeneratedCode/Quantities/Luminosity.g.cs # UnitsNet/GeneratedCode/Quantities/LuminousFlux.g.cs # UnitsNet/GeneratedCode/Quantities/LuminousIntensity.g.cs # UnitsNet/GeneratedCode/Quantities/MagneticField.g.cs # UnitsNet/GeneratedCode/Quantities/MagneticFlux.g.cs # UnitsNet/GeneratedCode/Quantities/Magnetization.g.cs # UnitsNet/GeneratedCode/Quantities/Mass.g.cs # UnitsNet/GeneratedCode/Quantities/MassConcentration.g.cs # UnitsNet/GeneratedCode/Quantities/MassFlow.g.cs # UnitsNet/GeneratedCode/Quantities/MassFlux.g.cs # UnitsNet/GeneratedCode/Quantities/MassFraction.g.cs # UnitsNet/GeneratedCode/Quantities/MassMomentOfInertia.g.cs # UnitsNet/GeneratedCode/Quantities/Molality.g.cs # UnitsNet/GeneratedCode/Quantities/MolarEnergy.g.cs # UnitsNet/GeneratedCode/Quantities/MolarEntropy.g.cs # UnitsNet/GeneratedCode/Quantities/MolarFlow.g.cs # UnitsNet/GeneratedCode/Quantities/MolarMass.g.cs # UnitsNet/GeneratedCode/Quantities/Molarity.g.cs # UnitsNet/GeneratedCode/Quantities/Permeability.g.cs # UnitsNet/GeneratedCode/Quantities/Permittivity.g.cs # UnitsNet/GeneratedCode/Quantities/PorousMediumPermeability.g.cs # UnitsNet/GeneratedCode/Quantities/Power.g.cs # UnitsNet/GeneratedCode/Quantities/PowerDensity.g.cs # UnitsNet/GeneratedCode/Quantities/PowerRatio.g.cs # UnitsNet/GeneratedCode/Quantities/Pressure.g.cs # UnitsNet/GeneratedCode/Quantities/PressureChangeRate.g.cs # UnitsNet/GeneratedCode/Quantities/RadiationEquivalentDose.g.cs # UnitsNet/GeneratedCode/Quantities/RadiationEquivalentDoseRate.g.cs # UnitsNet/GeneratedCode/Quantities/RadiationExposure.g.cs # UnitsNet/GeneratedCode/Quantities/Radioactivity.g.cs # UnitsNet/GeneratedCode/Quantities/Ratio.g.cs # UnitsNet/GeneratedCode/Quantities/RatioChangeRate.g.cs # UnitsNet/GeneratedCode/Quantities/ReciprocalArea.g.cs # UnitsNet/GeneratedCode/Quantities/ReciprocalLength.g.cs # UnitsNet/GeneratedCode/Quantities/RelativeHumidity.g.cs # UnitsNet/GeneratedCode/Quantities/RotationalAcceleration.g.cs # UnitsNet/GeneratedCode/Quantities/RotationalSpeed.g.cs # UnitsNet/GeneratedCode/Quantities/RotationalStiffness.g.cs # UnitsNet/GeneratedCode/Quantities/RotationalStiffnessPerLength.g.cs # UnitsNet/GeneratedCode/Quantities/Scalar.g.cs # UnitsNet/GeneratedCode/Quantities/SolidAngle.g.cs # UnitsNet/GeneratedCode/Quantities/SpecificEnergy.g.cs # UnitsNet/GeneratedCode/Quantities/SpecificEntropy.g.cs # UnitsNet/GeneratedCode/Quantities/SpecificFuelConsumption.g.cs # UnitsNet/GeneratedCode/Quantities/SpecificVolume.g.cs # UnitsNet/GeneratedCode/Quantities/SpecificWeight.g.cs # UnitsNet/GeneratedCode/Quantities/Speed.g.cs # UnitsNet/GeneratedCode/Quantities/StandardVolumeFlow.g.cs # UnitsNet/GeneratedCode/Quantities/Temperature.g.cs # UnitsNet/GeneratedCode/Quantities/TemperatureChangeRate.g.cs # UnitsNet/GeneratedCode/Quantities/TemperatureDelta.g.cs # UnitsNet/GeneratedCode/Quantities/TemperatureGradient.g.cs # UnitsNet/GeneratedCode/Quantities/ThermalConductivity.g.cs # UnitsNet/GeneratedCode/Quantities/ThermalInsulance.g.cs # UnitsNet/GeneratedCode/Quantities/Torque.g.cs # UnitsNet/GeneratedCode/Quantities/Turbidity.g.cs # UnitsNet/GeneratedCode/Quantities/VitaminA.g.cs # UnitsNet/GeneratedCode/Quantities/Volume.g.cs # UnitsNet/GeneratedCode/Quantities/VolumeConcentration.g.cs # UnitsNet/GeneratedCode/Quantities/VolumeFlow.g.cs # UnitsNet/GeneratedCode/Quantities/VolumeFlowPerArea.g.cs # UnitsNet/GeneratedCode/Quantities/VolumePerLength.g.cs # UnitsNet/GeneratedCode/Quantities/VolumetricHeatCapacity.g.cs # UnitsNet/GeneratedCode/Quantities/WarpingMomentOfInertia.g.cs # UnitsNet/GeneratedCode/Quantity.g.cs # UnitsNet/UnitConverter.cs
Lost in merge conflict
|
Apologies, I've been away for some time. What is the state of this |
|
Merged with latest |
|
Thanks for taking the time and merging @angularsen |
|
Better late than never, I've heard 🙈 |
Fixes IL warnings when building with AOT.
EnumHelper.GetValues<>to simplify enumerating enum values for netstandard and net7+, AOT compatibleUnitConverter.RegisterDefaultConversions()with generated code inQuantity.DefaultProvider.RegisterUnitConversions()UnitsNet.Serialization.JsonNet, requires more changesI tried to make minimal changes only, but possibly breaking changes are
structconstraint to generic enum-constrained methods