gpt4 book ai didi

vb.net - 列表框填充的优化

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:35:41 24 4
gpt4 key购买 nike

我在创建优化函数来拆分文本文件中的字符串并相应地填充我的 ListView 时遇到了一些问题。对于下面的函数,它需要 32 秒才能完成 40,000 行。

唯一的目标是获取文本文件的每一行,用空格分隔,并将它们输入到相应的列中。关于更快地排序这些行的任何建议?我也尝试过使用 Regulator Expression 进行拆分,但这没有帮助。

此博客对我要完成的目标进行了一些很好的基准测试,但我无法使其适应我的功能:http://cc.davelozinski.com/c-sharp/fastest-way-to-read-text-files

    Dim ColDate As String
Dim Time As String
Dim Action As String
Dim Protocol As String
Dim Source As String
Dim Destination As String
Dim SourcePort As String
Dim DestPort As String

Dim logFileStream As FileStream = New FileStream(My.Settings.LogLocation, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
Dim reader As StreamReader = New StreamReader(logFileStream)
Dim line As String

Do
line = reader.ReadLine
Try
'Make sure it's not a comment
If line.StartsWith("#") Then
Exit Try
End If

Dim split As String() = line.Split(" ")
ColDate = split(0)
Time = split(1)
Action = split(2)
Protocol = split(3)
Source = split(4)
Destination = split(5)
SourcePort = split(6)
DestPort = split(7)

frmMain.lstLogs.Items.Add(ColDate)
frmMain.lstLogs.Items(frmMain.lstLogs.Items.Count - 1).SubItems.Add(Time)
frmMain.lstLogs.Items(frmMain.lstLogs.Items.Count - 1).SubItems.Add(Action)
frmMain.lstLogs.Items(frmMain.lstLogs.Items.Count - 1).SubItems.Add(Protocol)
frmMain.lstLogs.Items(frmMain.lstLogs.Items.Count - 1).SubItems.Add(Source)
frmMain.lstLogs.Items(frmMain.lstLogs.Items.Count - 1).SubItems.Add(Destination)
frmMain.lstLogs.Items(frmMain.lstLogs.Items.Count - 1).SubItems.Add(SourcePort)
frmMain.lstLogs.Items(frmMain.lstLogs.Items.Count - 1).SubItems.Add(DestPort)

Catch ex As Exception
'MsgBox(ex.ToString)
End Try
'End If
Loop Until reader.EndOfStream
reader.Close()

最佳答案

不要在没有 .BeginUpdate.EndUpdate 的循环中更新用户界面。我当时正在使用一个大约有 1500 行的 ListView,它们会立即出现。

我创建了一个 ListViewItem 列表。然后遍历我的数据,添加每个新 ListViewItem 的详细信息并将其添加到列表中。在循环之后,.ToArray 允许我使用 ListView 的 .AddRange 方法。这被开始和结束更新所包围。没有屏幕重绘可以大大加快速度。

Private Sub OpCode()
Dim lstListItems As New List(Of ListViewItem)
Dim lines = File.ReadAllLines(My.Settings.LogLocation) 'Assume this is the path to the file you are reading
For Each line In lines
'Make sure it's not a comment
If line.StartsWith("#") Then
Continue For
End If

Dim split As String() = line.Split(" "c)

Dim li As New ListViewItem
li.Text = split(0) 'ColDate
li.SubItems.Add(split(1)) 'Time
li.SubItems.Add(split(2)) 'Action
li.SubItems.Add(split(3)) 'Protocol
li.SubItems.Add(split(4)) 'Source
li.SubItems.Add(split(5)) 'Destination
li.SubItems.Add(split(6)) 'SourcePort
li.SubItems.Add(split(7)) 'DestPort

lstListItems.Add(li)
Next
'Assume that lstLogs is the name of your ListView control
lstLogs.BeginEdit
lstLogs.Items.AddRange(lstListItems.ToArray)
lstLogs.EndEdit
End Sub

关于vb.net - 列表框填充的优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58231831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com