vb.net - 表单在 vb.net 中加载缓慢
问题描述
我目前在 vb.net 上的 ERP 项目中工作。我想在表单加载时将产品数据加载到文本框中。我正在使用自动完成方法,但数据约为 26000,表单加载缓慢 4 分钟。有没有办法避免这种情况,或者有没有办法在应用程序启动时在后台调用这个函数?
这是我的自动完成文本框代码。它工作正常,但由于数据太大,它挂了很多。
Private Sub pn()
Try
con = Class1.dbconn
Dim dt As New DataTable
Dim ds As New DataSet
ds.Tables.Add(dt)
Dim da As New SqlDataAdapter("select [Part Name] from
Part_Master_Download$", con)
da.Fill(dt)
Dim r As DataRow
TextBox9.AutoCompleteCustomSource.Clear()
For Each r In dt.Rows
TextBox9.AutoCompleteCustomSource.Add(r.Item(0).ToString)
Next
con.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
对于自动完成文本框,文本框的属性应设置为 true
解决方案
不要AutoCompleteCustomSource
在循环中填充。首先填充一个数组,然后通过一次调用一次性加载列表AddRange
:
Dim items = dt.Rows.Cast(Of DataRow)().
Select(Function(row) CStr(row(0)).
ToArray()
TextBox9.AutoCompleteCustomSource.AddRange(items)
您应该会发现这大大加快了速度。如果性能仍然存在问题,我们可以进一步观察。
编辑:为了证明我的观点,我刚刚测试了以下代码:
Public Class Form1
Private timer As Stopwatch
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
timer = Stopwatch.StartNew()
Dim rng As New Random
Dim a = Convert.ToInt32("a"c)
Dim z = Convert.ToInt32("z"c)
Dim items = Enumerable.Range(1, 26000).Select(Function(n) Convert.ToChar(rng.Next(a, z + 1)).ToString())
For Each item In items
TextBox1.AutoCompleteCustomSource.Add(item)
Next
End Sub
Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown
MessageBox.Show(timer.Elapsed.ToString())
End Sub
End Class
消息显示“00:03:08.3167858”,即加载列表只需三分钟多一点。然后我将Load
事件处理程序更改为:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
timer = Stopwatch.StartNew()
Dim rng As New Random
Dim a = Convert.ToInt32("a"c)
Dim z = Convert.ToInt32("z"c)
Dim items = Enumerable.Range(1, 26000).Select(Function(n) Convert.ToChar(rng.Next(a, z + 1)).ToString())
TextBox1.AutoCompleteCustomSource.AddRange(items.ToArray())
End Sub
所以一次调用AddRange
而不是Add
循环调用,消息是“00:00:00.0557427”,即不到56毫秒。那个更好吗?
推荐阅读
- firebase - 如何使用 Firebase https.onRequest 函数为不同的 GCP 项目实现发布订阅通知
- java - FFmpeg 命令将视频切割成更小的片段,无法以编程方式工作
- gitahead - In GitAhead, is there a way to change the UI color of the file status badges (A=added, D=deleted, M=modified), in difference between commits?
- jquery - 功能类似于 jQuery 的位置,但不是即时的
- javascript - 制作一个在加载特定页面时运行的异步函数
- python - 使用表达式变体在 Dataframe 上创建列
- c# - Entity Framework Core 在引用表中插入数据与外键的多对多关系
- git - git submodules - 如何撤消 git submodule update --init
- r - 如何将我的 ts 预测转换为具有日期值的数据框?
- datetime - 将“2020-09-14T14:04:43.123+0000”转换为“YYYY-MM-DD HH24:MI:SS”格式的日期时间,并在 XQuery 中添加分钟