啥也不会的乘序猿 2024-05-28 10:14 采纳率: 21.4%
浏览 2
已结题

For Each objWork In Me.Controls性能问题

vb.net的画面控件有几千个的情况下,当使用For Each objWork In Me.Controls循环遍历每一个控件,在使用Select Case TypeName(objWork)进行判断控件类型,并在进行其他设置,但是该for循环有严重的性能问题,该如何改善,提高性能

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-28 10:14
    关注

    引自免费微信小程序:皆我百晓生

    针对您描述的问题,我们可以从几个方面优化这个For Each循环,以提升性能。这里提供一种常见的优化策略:将控件按照类型分组后再处理。

    1. 使用一个字典(Dictionary)来存储不同类型的控件集合。
    2. 遍历控件时,根据控件类型将其添加到对应的列表中。
    3. 对于每个类型的控件,单独处理,而不是在整个循环中进行条件判断。

    以下是具体的VB.NET代码示例:

    ' 定义字典,键为控件类型名,值为相应类型的控件列表
    Dim controlsByType As New Dictionary(Of String, List(Of Control))
    
    ' 将所有控件按类型分类
    For Each objWork In Me.Controls
        If Not controlsByType.ContainsKey(TypeName(objWork)) Then
            controlsByType.Add(TypeName(objWork), New List(Of Control))
        End If
        controlsByType(TryCast(objWork.GetType(), Type).ToString()).Add(objWork)
    Next
    
    ' 分别处理各类控件
    For Each controlGroup In controlsByType
        Dim typeName As String = controlGroup.Key
        Dim groupControls As List(Of Control) = controlGroup.Value
        
        Select Case typeName
            Case "TextBox"
                ' 处理TextBox控件
                For Each txtBox In groupControls
                    ' 设置TextBox控件的相关属性
                Next
            Case "Button"
                ' 处理Button控件
                For Each btn In groupControls
                    ' 设置Button控件的相关属性
                Next
            ' 添加更多控件类型的处理...
            Case Else
                ' 如果有未定义的控件类型,可以在这里处理或忽略
        End Select
    Next
    

    通过这种方式,我们减少了条件判断次数,只在处理特定类型时才进行操作。同时,对于同一类型的控件,批量处理通常比单个处理更高效。

    注意:此优化方案适用于大部分情况,但具体效果可能会因实际情况而异,比如某些情况下可能需要考虑控件层级关系、事件处理等因素。如果问题依然存在,可能需要进一步分析代码逻辑,看是否有其他瓶颈或改进点。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月5日
  • 创建了问题 5月28日

悬赏问题

  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化
  • ¥15 Expected type 'str | PathLike[str]…… bytes' instead
  • ¥15 为什么在iis上部署网站,服务器可以访问,但是本地电脑访问不了
  • ¥15 三极管电路求解,已知电阻电压和三级关放大倍数
  • ¥15 ADS时域 连续相位观察方法
  • ¥15 Opencv配置出错
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我