gpt4 book ai didi

VB.NET 应用程序卡住且未运行

转载 作者:行者123 更新时间:2023-12-03 13:13:15 25 4
gpt4 key购买 nike

我有一个应用程序,它使用循环调用带有一些参数的新线程,该应用程序很棒,但是当涉及到 100,000 条左右的记录时,应用程序没有运行(在 CPU 和内存中 taskmgr 没有改变,因此假设程序不管用)

Action 是:
它运行一个函数,该函数首先收集一个数字 (X),然后创建一个从 0 到 X 的循环,在这个循环中,我们创建一个新的线程和选项,如 IsBackground (True)、Priority (Normal) 所示,并初始化线程。
在同一个函数中 Thread.Join 有一个 Do While (true),如果你可以穿过它刷新界面,中止线程,内存清理和 DoEvents!

在线程中使用 WebClient 来 OpenRead 并将所有这些保存在 Stream 中。
使用 WebClient.IsBusy = False Do 虽然我们确保下载信息并继续使用 Regex.Match 进行 MatchCollection。
使用 For Each 匹配并打印结果,并结束 Exit Do。

然后返回到返回一段时间的函数......

起初我认为这是因为列表框中打印的结果数量,但我得到了它并且仍然失败,而不是当它达到 100,000 条记录时,如果不是 100,800 左右。

我需要帮助,我不太了解 vb.net 中的编程,也不明白为什么。

编辑:
我尝试删除 For Each 线程,检查它是否是。
它已经完全出现了,但我不明白为什么在线程中的“For Each”时它甚至没有给我一个错误¿解决方案?

编辑:
我发现了这个错误,但我不明白我解释:

A)-> 使用 For 0 到 4500 初始化函数,我调用一个带参数的线程并接收 50 个结果,(225000 个寄存器 <- 4500 * 50)当主体 For 到达 ~ 4000,在线程中的 MatchCollection ¿失败?我没有收到 Regex.Matches 的信息,然后被卡住。

B) --> 用 4000 到 4500 初始化函数,我调用一个带参数的线程并接收 50 个结果,(225000 个寄存器 <- 4500 * 50),仅此而已开始第一个线程(现在记住从 4000 到 4500 开始,我已收到 25000 个寄存器)程序被卡住,我检查断点并失败包含 Regex.Matches 结果的变量并尝试循环该程序被卡住的数组!

为什么? ¿ 解决方案?

谢谢!!

功能1(初始化线程)

功能 1 ->

For Me.d = 0 To Pages(0) ' <-- 4500
Dim param(1) As Object
param(0) = "name"
param(1) = "url/" & d
Dim thread As New Thread(AddressOf Thread_)
thread.IsBackground = True
thread.Name = "name"
thread.Priority = ThreadPriority.Normal 'ThreadPriority.Lowest
thread.Start(param)
Do While thread.Join(True)
thread = Nothing
ClearMemory()
Application.DoEvents()
Exit Do
Loop
Next d

线程函数:
Public Sub Thread_(ByVal param As Object)
Try
If param(0) = "name" Then
Using Client As New WebClient
Client.Headers("User-Agent") = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1290.1 Safari/537.13"
Dim html As Stream = Client.OpenRead(param(1))
Using reader As New StreamReader(html)
Do While wc.IsBusy = False
Dim ReadStr = reader.ReadToEnd
links = Regex.Matches(ReadStr, "coderegex", RegexOptions.Compiled + RegexOptions.RightToLeft + RegexOptions.Multiline + RegexOptions.Singleline)
For Each match In links
Registres(0) = Registres(0) + 1
Debug.Print("Registro: " & Registres(0) & " pág:" & PagesComplete(0))
Next
PagesComplete(0) = PagesComplete(0) + 1
links = Nothing
Client.Dispose()
Exit Do
Loop
End Using
End Using
End If
Catch ex As Exception
Debug.Print("Error " & ex.Message)
End Try
End Sub

最佳答案

这部分看起来很可疑:

Do While thread.Join(True)
thread = Nothing
ClearMemory()
Application.DoEvents()
Exit Do
Loop

不应该是这样的:

thread.Join()
thread = Nothing
ClearMemory()


如果您使用的框架 >=4,那么您可以考虑使用 Parallel.For ( MSDN)。您无需创建自己的线程,而是让框架为您处理它。

关于VB.NET 应用程序卡住且未运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12993110/

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