-
Notifications
You must be signed in to change notification settings - Fork 397
✨Set IsAotCompatible for net7.0 or later #1543
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
✨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
struct
constraint to generic enum-constrained methods