From 8c66ffac96bab0a2849cb47ade1c0240cd4d5aa5 Mon Sep 17 00:00:00 2001 From: Louis DeJardin Date: Wed, 10 Nov 2010 16:32:41 -0800 Subject: [PATCH] Patching NHibernate.Linq for performance Avoids compiling expressions for constant or closure values --HG-- branch : perf extra : rebase_source : 0731ec817dc7daf37e651679177596c5ca97d580 --- lib/linqnhibernate/NHibernate.Linq.dll | Bin 94208 -> 86016 bytes lib/linqnhibernate/NHibernate.Linq.xml | 6 + .../condensing-constant-expressions.patch | 156 ++++++++++++++++++ lib/linqnhibernate/orchard-buildnotes.txt | 5 + 4 files changed, 167 insertions(+) create mode 100644 lib/linqnhibernate/condensing-constant-expressions.patch create mode 100644 lib/linqnhibernate/orchard-buildnotes.txt diff --git a/lib/linqnhibernate/NHibernate.Linq.dll b/lib/linqnhibernate/NHibernate.Linq.dll index 47d6d1303eba48c45ad038eb869a00160443d4e0..682351e37a4932e2e490c61093f87c17e777c3db 100644 GIT binary patch literal 86016 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ℑqAnCS0jwjw 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 + +

+ Brings certain basic expression patterns closer to the surface to + avoid a lambda compile and dynamic invoke in simple cases + + Performs bottom-up analysis to determine which nodes can possibly diff --git a/lib/linqnhibernate/condensing-constant-expressions.patch b/lib/linqnhibernate/condensing-constant-expressions.patch new file mode 100644 index 000000000..051176fee --- /dev/null +++ b/lib/linqnhibernate/condensing-constant-expressions.patch @@ -0,0 +1,156 @@ +Index: src/NHibernate.Linq/src/NHibernate.Linq/Visitors/Evaluator.cs +=================================================================== +--- src/NHibernate.Linq/src/NHibernate.Linq/Visitors/Evaluator.cs (revision 1432) ++++ src/NHibernate.Linq/src/NHibernate.Linq/Visitors/Evaluator.cs (working copy) +@@ -2,6 +2,7 @@ + using System.Collections.Generic; + using System.Linq; + using System.Linq.Expressions; ++using System.Reflection; + + namespace NHibernate.Linq.Visitors + { +@@ -76,12 +77,143 @@ + if (e.NodeType == ExpressionType.Lambda) + return e; + ++ Expression condensed = new Condensor().Visit(e); ++ if (condensed.NodeType == ExpressionType.Constant) ++ return condensed; ++ + LambdaExpression lambda = Expression.Lambda(e); + Delegate fn = lambda.Compile(); + return Expression.Constant(fn.DynamicInvoke(null), e.Type); + } + } + ++ /// ++ /// Brings certain basic expression patterns closer to the surface to ++ /// avoid a lambda compile and dynamic invoke in simple cases ++ /// ++ class Condensor : ExpressionVisitor ++ { ++ protected override Expression VisitMemberAccess(MemberExpression m) ++ { ++ Expression exp = Visit(m.Expression); ++ ++ object constant; ++ if (m.NodeType== ExpressionType.MemberAccess && TryGetConstant(exp, out constant)) ++ { ++ if (m.Member.MemberType == MemberTypes.Field) ++ { ++ FieldInfo field = (FieldInfo) m.Member; ++ object value = field.GetValue(constant); ++ return Expression.Constant(value, m.Type); ++ } ++ } ++ ++ if (exp != m.Expression) ++ { ++ return Expression.MakeMemberAccess(exp, m.Member); ++ } ++ return m; ++ } ++ ++ ++ protected override Expression VisitUnary(UnaryExpression u) { ++ Expression operand = Visit(u.Operand); ++ ++ object constant; ++ if (u.NodeType== ExpressionType.Convert && TryGetConstant(operand, out constant)) ++ { ++ if (u.Method == null) ++ { ++ Func converter = BindConverter(operand.Type, u.Type); ++ object value = converter(constant); ++ return Expression.Constant(value, u.Type); ++ } ++ } ++ ++ if (operand != u.Operand) { ++ return Expression.MakeUnary(u.NodeType, operand, u.Type, u.Method); ++ } ++ return u; ++ } ++ ++ private static bool TryGetConstant(Expression expression, out object constant) { ++ if (expression == null) { ++ constant = null; ++ return true; ++ } ++ ++ if (expression.NodeType == ExpressionType.Constant) { ++ constant = ((ConstantExpression)expression).Value; ++ return true; ++ } ++ ++ if (expression.NodeType == ExpressionType.New) { ++ NewExpression nex = (NewExpression)expression; ++ object[] constants; ++ if (nex.Members == null && TryGetConstants(nex.Arguments, out constants)) { ++ constant = nex.Constructor.Invoke(constants); ++ return true; ++ } ++ } ++ ++ constant = null; ++ return false; ++ } ++ ++ private static bool TryGetConstants(IList expressions, out object[] constants) { ++ if (expressions == null) { ++ constants = null; ++ return false; ++ } ++ ++ object[] results = new object[expressions.Count]; ++ for (int index = 0; index != expressions.Count; ++index) { ++ if (!TryGetConstant(expressions[index], out results[index])) { ++ constants = null; ++ return false; ++ } ++ } ++ ++ constants = results; ++ return true; ++ } ++ ++ ++ private static readonly IDictionary>> _converterGroups = new Dictionary>>(); ++ ++ private static Func BindConverter(System.Type inType, System.Type outType) ++ { ++ IDictionary> converterGroup; ++ lock(_converterGroups) ++ { ++ if (!_converterGroups.TryGetValue(inType, out converterGroup)) ++ { ++ converterGroup = new Dictionary>(); ++ _converterGroups[inType] = converterGroup; ++ } ++ } ++ ++ Func converter; ++ lock (converterGroup) ++ { ++ if (!converterGroup.TryGetValue(outType, out converter)) ++ { ++ var arg0 = Expression.Parameter(typeof(object), "arg0"); ++ var lambda = Expression.Lambda>( ++ Expression.ConvertChecked( ++ Expression.Convert( ++ Expression.ConvertChecked(arg0, inType), ++ outType), ++ typeof(object)), ++ arg0); ++ converter = lambda.Compile(); ++ converterGroup[outType] = converter; ++ } ++ } ++ return converter; ++ } ++ } ++ + /// + /// Performs bottom-up analysis to determine which nodes can possibly + /// be part of an evaluated sub-tree. diff --git a/lib/linqnhibernate/orchard-buildnotes.txt b/lib/linqnhibernate/orchard-buildnotes.txt new file mode 100644 index 000000000..dffb973d7 --- /dev/null +++ b/lib/linqnhibernate/orchard-buildnotes.txt @@ -0,0 +1,5 @@ + +https://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/trunk/src/NHibernate.Linq +at revision #1432 +applied condensing-constant-expressions.patch +nant -D:project.config=release