首页 > 解决方案 > C# 中 forAch 循环中 lambda 表达式的性能评估

问题描述

我的程序中有以下代码:此代码将遍历数十万条记录,因此我需要查看它是否可以改进:

private void FillObjectTypes(Type type, ElementMapping mapping )
        {
            foreach (var fieldMapping in mapping.FieldMappings.Values.Where(mpng => mpng.ConversionType == ConversionType.InferFromPropertyType))
            {
                fieldMapping.PropertyType = ReflectionUtils.GetPropertyType(type, fieldMapping.PropertyName);
            }
            mapping.FieldMappingsTypesSet = true;
        }

任何改进代码的想法都将受到高度赞赏。我的主要问题是 lambda 表达式将如何影响性能。

以及下面的反射代码:

public static Type GetPropertyType(Type objectType, string propertyName)
        {
            CheckCache(objectType);
            try
            {
                return propertiesByType[objectType][propertyName].PropertyType;
            }
            catch(KeyNotFoundException excp)
            {
                throw new KeyNotFoundException($"Failed to find property:'{propertyName}' in object type:'{objectType.Name}'",excp);
            }
        }

标签: c#

解决方案


你这里的 Lambda 表达式只是在做过滤,所以我想不出这个Where子句的优化。

正如我所看到的使用并行循环的一些建议,我想指出并行代码并不总是比顺序代码快。 这是因为创建和同步多个线程的额外开销。

我猜您的示例中的并行循环会比正常的顺序循环慢,因为在每个循环中完成的工作很少。

看到这个这个问题


推荐阅读