debugging Visual Studio:条件断点导致程序变慢

k5ifujac  于 2023-04-06  发布在  其他
关注(0)|答案(1)|浏览(174)

我在.NET 6 ASP.NET API中有一个条件断点,这会导致程序运行速度大大降低。如何使用条件断点而不会对性能造成这种影响?
一旦我禁用了条件断点,它就会在几秒钟内完成并相当快地返回响应,如果我放置一个没有条件的常规断点来检查,它就会像它应该的那样快速地命中断点。这是有这个问题的条件断点,它让我在命中断点之前等待超过10分钟。
一段代码:

List<EntityModel> _data;

public EntityFieldModel ResolveSingle(Field mergeField, EntityModel entity = null)
{
    if (!string.IsNullOrEmpty(mergeField.FilterField) && 
    !string.IsNullOrEmpty(mergeField.FilterValue))
        foreach (EntityModel entityModel in _data)
            foreach (EntityFieldModel fieldProperty in entityModel.FieldProperties)

                // The break point is on the if-statement below

                if (
                    entityModel.DatasetId == mergeField.DataSet &&
                    fieldProperty.FieldName == mergeField.FilterField &&
                    fieldProperty.GetFormattedValue(string.Empty) == mergeField.FilterValue
                )
                {
                    entity = entityModel;
                    break;
                }
   ...
}

断点条件:

mergeField.FilterValue == "Lorem Ipsum" &&
entityModel.DatasetId == mergeField.DataSet &&
fieldProperty.Value.GetType() == typeof(EntityReference)

这是条件断点的常见问题吗?如何解决?

5us2dqdw

5us2dqdw1#

这是意料之中的。条件断点将导致程序中断,切换到调试器,然后由调试器计算表达式。所以在幕后,条件断点需要调试器和被测应用程序之间的大量通信。2这是昂贵的。3因此,将条件断点放置在执行多次的行上将对性能产生重大影响。如果你需要分析一段代码中的一个特定问题,而这段代码被执行了很多次,那么在代码中引入条件并重新构建通常会更快,就像这样:

if (mergeField.FilterValue == "Lorem Ipsum" &&
entityModel.DatasetId == mergeField.DataSet &&
fieldProperty.Value.GetType() == typeof(EntityReference))
{
    int a = 0; // place breakpoint here
}

相关问题