NewLife/X

简化Reflect.As,它的复杂性影响了普通操作的性能
大石头 编写于 2018-12-08 10:51:36
共计: 修改6个文件,增加33行、删除31行。
修改 +2 -1
修改 +1 -1
修改 +24 -23
修改 +2 -2
修改 +2 -2
修改 +2 -2
修改 +2 -1
diff --git a/NewLife.Core/Data/DbTable.cs b/NewLife.Core/Data/DbTable.cs
index da2dc92..c354898 100644
--- a/NewLife.Core/Data/DbTable.cs
+++ b/NewLife.Core/Data/DbTable.cs
@@ -128,10 +128,11 @@ namespace NewLife.Data
             var count = ts.Length;
 
             var total = 0;
+            var length = bn.Stream.Length;
             var rs = new List<Object[]>(rows);
             for (var k = 0; k < rows; k++)
             {
-                if (bn.Stream.Position >= bn.Stream.Length) break;
+                if (bn.Stream.Position >= length) break;
 
                 var row = new Object[count];
                 for (var i = 0; i < count; i++)
修改 +1 -1
diff --git a/NewLife.Core/Log/Logger.cs b/NewLife.Core/Log/Logger.cs
index e38d65f..c22d614 100644
--- a/NewLife.Core/Log/Logger.cs
+++ b/NewLife.Core/Log/Logger.cs
@@ -119,7 +119,7 @@ namespace NewLife.Log
 
         class NullLogger : Logger
         {
-            public override Boolean Enable { get { return false; } set { } }
+            public override Boolean Enable { get => false; set { } }
 
             protected override void OnWrite(LogLevel level, String format, params Object[] args) { }
         }
修改 +24 -23
diff --git a/NewLife.Core/Reflection/IReflect.cs b/NewLife.Core/Reflection/IReflect.cs
index b72309f..9030e5e 100644
--- a/NewLife.Core/Reflection/IReflect.cs
+++ b/NewLife.Core/Reflection/IReflect.cs
@@ -661,6 +661,7 @@ namespace NewLife.Reflection
         public Boolean As(Type type, Type baseType)
         {
             if (type == null) return false;
+            if (type == baseType) return true;
 
             // 如果基类是泛型定义
             if (baseType.IsGenericTypeDefinition && type.IsGenericType && !type.IsGenericTypeDefinition) type = type.GetGenericTypeDefinition();
@@ -669,8 +670,8 @@ namespace NewLife.Reflection
 
             if (baseType.IsAssignableFrom(type)) return true;
 
-            // 绝大部分子类判断可通过IsAssignableFrom完成,除非其中一方ReflectionOnly
-            if (type.Assembly.ReflectionOnly != baseType.Assembly.ReflectionOnly) return false;
+            //// 绝大部分子类判断可通过IsAssignableFrom完成,除非其中一方ReflectionOnly
+            //if (type.Assembly.ReflectionOnly == baseType.Assembly.ReflectionOnly) return false;
 
             // 缓存
             //var key = $"{type.FullName}_{baseType.FullName}";
@@ -683,28 +684,28 @@ namespace NewLife.Reflection
             //if (dic.TryGetValue(baseType, out var rs)) return rs;
             var rs = false;
 
-            // 接口
-            if (baseType.IsInterface)
-            {
-                if (type.GetInterface(baseType.FullName) != null)
-                    rs = true;
-                else if (type.GetInterfaces().Any(e => e.IsGenericType && baseType.IsGenericTypeDefinition ? e.GetGenericTypeDefinition() == baseType : e == baseType))
-                    rs = true;
-            }
+            //// 接口
+            //if (baseType.IsInterface)
+            //{
+            //    if (type.GetInterface(baseType.FullName) != null)
+            //        rs = true;
+            //    else if (type.GetInterfaces().Any(e => e.IsGenericType && baseType.IsGenericTypeDefinition ? e.GetGenericTypeDefinition() == baseType : e == baseType))
+            //        rs = true;
+            //}
 
-            // 判断是否子类时,支持只反射加载的程序集
-            if (!rs && type.Assembly.ReflectionOnly)
-            {
-                // 反射加载时,需要特殊处理接口
-                //if (baseType.IsInterface && type.GetInterface(baseType.Name) != null) return true;
-                while (!rs && type != typeof(Object))
-                {
-                    if (type.FullName == baseType.FullName &&
-                        type.AssemblyQualifiedName == baseType.AssemblyQualifiedName)
-                        rs = true;
-                    type = type.BaseType;
-                }
-            }
+            //// 判断是否子类时,支持只反射加载的程序集
+            //if (!rs && type.Assembly.ReflectionOnly)
+            //{
+            //    // 反射加载时,需要特殊处理接口
+            //    //if (baseType.IsInterface && type.GetInterface(baseType.Name) != null) return true;
+            //    while (!rs && type != typeof(Object))
+            //    {
+            //        if (type.FullName == baseType.FullName &&
+            //            type.AssemblyQualifiedName == baseType.AssemblyQualifiedName)
+            //            rs = true;
+            //        type = type.BaseType;
+            //    }
+            //}
 
             //dic.TryAdd(baseType, rs);
 
修改 +2 -2
diff --git a/NewLife.Core/Serialization/Binary/Binary.cs b/NewLife.Core/Serialization/Binary/Binary.cs
index 60e2f61..a1bc311 100644
--- a/NewLife.Core/Serialization/Binary/Binary.cs
+++ b/NewLife.Core/Serialization/Binary/Binary.cs
@@ -121,7 +121,7 @@ namespace NewLife.Serialization
                 type = value.GetType();
 
                 // 一般类型为空是顶级调用
-                if (Hosts.Count == 0) WriteLog("BinaryWrite {0} {1}", type.Name, value);
+                if (Hosts.Count == 0 && Log != null && Log.Enable) WriteLog("BinaryWrite {0} {1}", type.Name, value);
             }
 
             // 优先 IAccessor 接口
@@ -240,7 +240,7 @@ namespace NewLife.Serialization
         //[DebuggerHidden]
         public virtual Boolean TryRead(Type type, ref Object value)
         {
-            if (Hosts.Count == 0) WriteLog("BinaryRead {0} {1}", type.Name, value);
+            if (Hosts.Count == 0 && Log != null && Log.Enable) WriteLog("BinaryRead {0} {1}", type.Name, value);
 
             // 优先 IAccessor 接口
             if (value is IAccessor acc)
修改 +2 -2
diff --git a/NewLife.Core/Serialization/Json/Json.cs b/NewLife.Core/Serialization/Json/Json.cs
index 0f95f72..ae662b1 100644
--- a/NewLife.Core/Serialization/Json/Json.cs
+++ b/NewLife.Core/Serialization/Json/Json.cs
@@ -105,7 +105,7 @@ namespace NewLife.Serialization
                 type = value.GetType();
 
                 // 一般类型为空是顶级调用
-                if (Hosts.Count == 0) WriteLog("JsonWrite {0} {1}", type.Name, value);
+                if (Hosts.Count == 0 && Log != null && Log.Enable) WriteLog("JsonWrite {0} {1}", type.Name, value);
             }
 
             //foreach (var item in Handlers)
@@ -169,7 +169,7 @@ namespace NewLife.Serialization
         [DebuggerHidden]
         public virtual Boolean TryRead(Type type, ref Object value)
         {
-            if (Hosts.Count == 0) WriteLog("JsonRead {0} {1}", type.Name, value);
+            if (Hosts.Count == 0 && Log != null && Log.Enable) WriteLog("JsonRead {0} {1}", type.Name, value);
 
             foreach (var item in Handlers)
             {
修改 +2 -2
diff --git a/NewLife.Core/Serialization/Xml/Xml.cs b/NewLife.Core/Serialization/Xml/Xml.cs
index 69c41cb..5c48dd4 100644
--- a/NewLife.Core/Serialization/Xml/Xml.cs
+++ b/NewLife.Core/Serialization/Xml/Xml.cs
@@ -115,7 +115,7 @@ namespace NewLife.Serialization
             CurrentName = name;
 
             // 一般类型为空是顶级调用
-            if (Hosts.Count == 0) WriteLog("XmlWrite {0} {1}", name ?? type.Name, value);
+            if (Hosts.Count == 0 && Log != null && Log.Enable) WriteLog("XmlWrite {0} {1}", name ?? type.Name, value);
 
             // 要先写入根
             Depth++;
@@ -240,7 +240,7 @@ namespace NewLife.Serialization
             // 移动到第一个元素
             while (reader.NodeType != XmlNodeType.Element) { if (!reader.Read()) return false; }
 
-            if (Hosts.Count == 0) WriteLog("XmlRead {0} {1}", type.Name, value);
+            if (Hosts.Count == 0 && Log != null && Log.Enable) WriteLog("XmlRead {0} {1}", type.Name, value);
 
             // 要先写入根
             Depth++;