When CaseSensitive is set to true from JaceOptions, performance should
be significantly better than without case sensitivity. Case sensitivity
setting was not passed to FunctionRegistry and ConstantRegistry
constructors, which caused them to do extra lower case conversions in
case variable dictionary was passed to the formula. Fixes issue #75.
New benchmark was created to verify the fix. Benchmark needs to have
variables which are provided to CalculationEngine.Calculate(), so
VerifyVariableNames() gets called, which causes the extra calls to
ToLowerFast().
Below results show ~200 ms improvement when Case Sensitive is true.
Results table was created by running benchmark separately with
and without fix and copying results to one table.
Engine
Case Sensitive
Formula
Total Iteration
Total Duration (fix)
Total Duration (no fix)
Interpreted
False
something2 - (var1 + var2 * 3)/(2+3)
1000000
00:00:01.6005267
00:00:01.5919016
Interpreted
True
something2 - (var1 + var2 * 3)/(2+3)
1000000
00:00:00.6069845
00:00:00.8390435
Compiled
False
something2 - (var1 + var2 * 3)/(2+3)
1000000
00:00:01.5865326
00:00:01.5770084
Compiled
True
something2 - (var1 + var2 * 3)/(2+3)
1000000
00:00:00.5930012
00:00:00.8189981
Additionally:
Unit test which tests case sensitivity enabled throws when variable
case does not match
Benchmark uses dictionary copy constructor to avoid throwing due to
dictionary being modified with constants and then failing on
VerifyVariableNames().
When CaseSensitive is set to true from JaceOptions, performance should be significantly better than without case sensitivity. Case sensitivity setting was not passed to
FunctionRegistry
andConstantRegistry
constructors, which caused them to do extra lower case conversions in case variable dictionary was passed to the formula. Fixes issue #75.New benchmark was created to verify the fix. Benchmark needs to have variables which are provided to
CalculationEngine.Calculate()
, so VerifyVariableNames() gets called, which causes the extra calls toToLowerFast()
.Below results show ~200 ms improvement when Case Sensitive is true. Results table was created by running benchmark separately with and without fix and copying results to one table.
Additionally:
VerifyVariableNames()
.