Ускорить работу WebBrowser - Visual Basic .NET

  1. У меня есть WebBrowser, который загружает страницу и вынимает от туда текст, ну а затем работает с ним. Мне не нужно графическое оформление страницы (пользователь ее не видит) Можно ли загружать не полностью страницу, а только текст из нее? P.S. Или есть другой способ ускорить загрузку страниц в WebBrowser?


textual

Код к задаче: «Ускорить работу WebBrowser - Visual Basic .NET»

' Вместо этой строки должна быть загрузка html с сайта
Dim html As String = File.ReadAllText("D:\Портал _Петербургское образование_.html")
 
Dim htmlDoc As New HtmlAgilityPack.HtmlDocument
htmlDoc.LoadHtml(html)
Dim marksTable As HtmlAgilityPack.HtmlNode = htmlDoc.GetElementbyId("marks")
Dim text As String = String.Join(Environment.NewLine, marksTable.SelectNodes("tbody/tr").Select(Function(tr) String.Join(" ", tr.SelectNodes("td").Select(Function(td) td.InnerText.Trim()))))
 
textBox.Text = text

СДЕЛАЙТЕ РЕПОСТ

8   голосов, оценка 3.750 из 5



Похожие ответы
  1. Доброго, форумчане! не удается приостановить работу потока (resume/suspend - не работает) поток работает с внешним приложением с некоторыми непредсказуемыми случаями и что бы не начинать по новой. все что удалось найти (не работает - поток продолжает работу)https://msdn.microsoft.com/en-us/lib...aithandle.aspxhttps://msdn.microsoft.com/en-us/lib...e.waitone.aspxvb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 Imports System.Threading   Public Class Form1  Dim th1 As New Thread(AddressOf ThreadProc)  Dim paused As Int16 = 0   Private wh As ManualResetEvent = New ManualResetEvent(True) 'Private wh As EventWaitHandle = New AutoResetEvent(True) 'Private wh As EventWaitHandle = New EventWaitHandle(False, EventResetMode.ManualReset)   Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click         th1.Start() End Sub   Private Sub ThreadProc() wh.WaitOne()      While True             MsgBox("")         End While End Sub End Class   '------------------приостановить/возобновить работу потока----------------------------------- Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click         If paused = 0 Then             Button5.ForeColor = Color.Red             paused = paused + 1             wh.Reset()         Else             Button5.ForeColor = Color.Black             paused = paused - 1             wh.Set()         End If     End SubДобавлено через 35 минут сделал так но цикл выполняется полностью... и далее начинается с начало vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 Imports System.Threading Public Class Form1     Dim th1 As New Thread(AddressOf ThreadProc)     Dim paused As Int16 = 0     Dim manualEvent As New ManualResetEvent(True)     '------------------приостановить/возобновить работу потока-----------------------------------     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click         If paused = 0 Then             Button1.ForeColor = Color.Red             paused = paused + 1             manualEvent.Reset()         Else             Button1.ForeColor = Color.Black             paused = paused - 1             manualEvent.[Set]()         End If     End Sub     Private Sub ThreadProc(manualEvent As Object)         Dim ev As ManualResetEvent = DirectCast(manualEvent, ManualResetEvent)         While ev.WaitOne()             MsgBox("1")             Thread.Sleep(2000)             MsgBox("2")             Thread.Sleep(2000)             MsgBox("3")         End While     End Sub       Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click         th1.Start(manualEvent)     End Sub End Class

  1. Всем привет. Столкнулся с такой проблемой, что парсинг html текста идет очень долго. Посмотрите пожалуйста, как можно оптимизировать код по скорости?vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 On Error Resume Next         Dim int As Integer         Dim fintext As String         int = 0         Dim html_text As String = WebBrowser1.Document.Body.InnerHtml         Dim toggle As String         Dim bool As Boolean         Dim words As String() = html_text.Split(" 4 Then                     'парсинг                     toggle = toggle + vbNewLine                     toggle = toggle.Replace("/SPAN>", "")                     toggle = toggle.Replace("SPAN class=Xb>", "")                     toggle = toggle.Replace("SPAN Class=Xc4>", "")                     toggle = toggle.Replace("SPAN class=Xc15>", "")                     toggle = toggle.Replace("SPAN class=", "")                     toggle = toggle.Replace("SPAN", "")                     toggle = toggle.Replace("Xc4", "")                     toggle = toggle.Replace("Xc0 Xb", "")                     toggle = toggle.Replace("<", "")                     toggle = toggle.Replace(">", "")                     Dim linez As String() = toggle.Split(vbNewLine)                     For Each linn As String In linez                         fintext = linn                         System.IO.File.WriteAllText("everyline.txt", fintext)                         Dim hash2 As HashSet(Of String) = New HashSet(Of String)                         Dim file2 As String() = IO.File.ReadAllLines("everyline.txt")                         For Each item2 As String In file2                             If item2.StartsWith(4) Then                                 hash2.Add(item2)                             ElseIf item2.StartsWith(5)                                 hash2.Add(item2)                             ElseIf item2.StartsWith(3)                                 hash2.Add(item2)                             ElseIf linn.Contains("APP")                                 hash2.Add(item2)                             ElseIf linn.Contains("$")                                 hash2.Add(item2)                             End If                         Next                         IO.File.WriteAllLines("filtered.txt", hash2.ToList())                     Next                                         End If                         bool = True             End If         Next

  1. Как ускорить процесс поиска в программе:vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 Public Class Form1 Dim A1 As Integer 'A1 от 0 до Максимум 200 Dim База_20 As String 'База_20 Максимум 100 символов Dim kor As Integer 'Максимум 10 цифр от 0 до 10   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click         If kor = 0 Then             kor = 1             Button1.Text = "Два"             Exit Sub         End If         If kor = 1 Then             kor = 2             Button1.Text = "Три"             Exit Sub         End If         If kor = 2 Then             kor = 0             Button1.Text = "Один"             Exit Sub         End If End Sub                  'Таймер включен Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick if kor= 0 then call odin() End Sub   sub odin()         If StrComp(Mid(Label2.Text, 1, 9), "Кубанская") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 8), "Звёздная") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 8), "Звездная") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 16), "Воробьева проезд") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 16), "Воробьёва проезд") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 19), "Николая Островского") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 16), "Михаила Луконина") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 11), "Космонавтов") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 9), "Кубанская") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 26), "Николая Островского проезд") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 20), "Юго-восточный проезд") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 9), "Кирова, 7") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 9), "Кирова, 8") = 0 Then Call Vybraty()                             'вариантов сравнения на много больше         if kor>0 then call dva() End sub   sub dva()         If StrComp(Mid(Label2.Text, 1, 16), "Ганерала Епишева") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 7), "Власова") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 6), "Гоголя") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 8), "Волжская") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 20), "Богдана Хмельницкого") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 5), "Южная") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 9), "Пороховая") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 10), "Ахшарумова") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 12), "Игарская 2-я") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 23), "Набережная Приволжского") = 0 Then Call Vybraty()                                        'вариантов сравнения на много больше         if kor>1 then call try() End sub   sub try()         If StrComp(Mid(Label2.Text, 1, 10), "Джона Рида") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 14), "Магнитогорская") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 7), "Баумана") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 12), "Студенческая") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 7), "Курская") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 8), "Барсовой") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 15), "Софьи Перовской") = 0 Then Call Vybraty()         If StrComp(Mid(Label2.Text, 1, 22), "Красная Набережная, 22") = 0 Then Call Vybraty()                  'вариантов сравнения на много больше End sub   sub Vybray() 'Выполняет какое-то действие End sub End Class Label2.text Меняется каждые 2 секунды Поиск одной подпрограммы занимает 3 секунды, а если Button1 задействует все 3 подпрограммы, а их там еще больше, то поиск займет много секунд. А мне надо, чтобы поиск занял 1-2 секунды максимум. Заранее спасибо.Добавлено через 19 минут Ну может vb.net1 If StrComp(Mid(Label2.Text, 1, 9), "Кирова, 8") = 0 Then Call Vybraty()сравнивать как нибудь по другому

  1. Нужно что бы программа сначала проверила, открыто ли данное приложение, и в случае запуска он должен его закрыть и продолжить процедуру. Вся суть софта : Чистка Cookies браузера google chrome. Если при открытом браузере чистить куки, то программа выдает ошибку. А при закрытом браузере все хорошо чистит. Вот код который проверяет на запуск программы Далее далее должна происходить очистка, но как их совместить : vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19   Private Sub Button5_Click_2(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click         Dim Proc() As Process         Dim ModuleName, ProcName As String         ModuleName = "chrome.exe"         ProcName = System.IO.Path.GetFileNameWithoutExtension(ModuleName)         Proc = Process.GetProcessesByName(ProcName)         If Proc.Length > 0 Then             MsgBox("Запущен Браузер chrome")         Else             MsgBox("Очистка браузера")             Application.Exit()         End If           If My.Computer.FileSystem.DirectoryExists(System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & "\Google\Chrome\User Data\Default") Then             My.Computer.FileSystem.DeleteDirectory(System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & "\Google\Chrome\User Data\Default", FileIO.DeleteDirectoryOption.DeleteAllContents)             My.Computer.FileSystem.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & "\Google\Chrome\User Data\Default")         End If     End Sub End ClassПосле MsgBox : "Запущен Браузер chrome" он должен закрыть браузер и удалить все файлы что указаны ниже. После MsgBox: "Очистка браузера" Он должен сразу приступить к удалению и в конце вывести MsgBox о успешном завершение.

  1. Здравствуйте! Есть ли возможность ускорить работоспособность программы? На входе есть десяток данных и в дальнейшем функция вычисляет из почти в 50-100 формул итоговое значение и отображается его на графике. Суть в том что нужно сделать отображение на графике всех возможных значений, для этого я делаю шаг в расчете для Х и Y всего 0.01 и тогда программа очень долго думает! порядка 20 секунд. Возможно как то это побороть?vb.net1 2 3 4 5 6 7 8         For z2 = 0.4 To 1.2 Step 0.01             For z1 = 0.5 To 3.0 Step 0.01                 If my1(z1, z2) > 0 And my1(z1, z2) < 100 Then                     e.Graphics.DrawString(my1(z1, z2), font1, brush2, z2 * 300 - 120, -z1 * 100 + 50)                 End If               Next z1         Next z2

  1. Здравствуйте, уважаемые обитатели форума! Перейду сразу к делу. Итак, есть небольшая часть программы, которая данные из текстовика переносит в ДатаГрид. В текстовике может быть немерянно строк, хоть полмиллиона, поэтому было решено использовать BackGroundWorker. Собственно в каждой строке нужные мне части разделены пробелами, при этом некоторые части могут отсутствовать (если таковые имеются - заменяются пробелами). Вот код:vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 Public Class Form1     Dim a() As String     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click         Dim ofd As New OpenFileDialog         Try             ofd.ShowDialog()             If Windows.Forms.DialogResult.Cancel = True Then                 Me.Close()             End If             a = IO.File.ReadAllLines(ofd.FileName, System.Text.Encoding.GetEncoding(866))             Button2.Enabled = True             Button1.Enabled = False             Timer1.Start()         Catch ex As Exception         End Try         If BackgroundWorker1.IsBusy <> True Then             BackgroundWorker1.RunWorkerAsync()         End If     End Sub     Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted         Try             TextBox1.Text = a.Length             For i As Integer = 0 To a.Length - 1             DataGridView1.Rows.Add(a(i).Chars(3), a(i).Chars(5), a(i).Chars(7) & a(i).Chars(8) & a(i).Chars(9) & a(i).Chars(10), a(i).Chars(12) & a(i).Chars(13) & a(i).Chars(14) & a(i).Chars(15) & a(i).Chars(16) & a(i).Chars(17), a(i).Remove(0, 19))             ProgressBar1.Maximum = a.Length             ProgressBar1.Value += 1             Application.DoEvents()             TextBox2.Text = DataGridView1.Rows.Count - 1             Next         Catch ex As Exception         End Try     End Sub End Classскорость работы не радует - на добавление тысячи записей требуется в среднем 11 секунд, т. е. почти 20 минут на 100 К строк. вычитал где-то что, мол, использование переменных типа char и string прошлый век, и намного быстрее использовать класс system.text.stringbuilder. Вдохновился прочитанным, заменил vb.net1 DataGridView1.Rows.Add(a(i).Chars(3), a(i).Chars(5), a(i).Chars(7) & a(i).Chars(8) & a(i).Chars(9) & a(i).Chars(10), a(i).Chars(12) & a(i).Chars(13) & a(i).Chars(14) & a(i).Chars(15) & a(i).Chars(16) & a(i).Chars(17), a(i).Remove(0, 19))наvb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19  Dim v As New System.Text.StringBuilder(a(i))              v.Remove(0, 3)              b(i) = v.ToString              Dim liter As New System.Text.StringBuilder(b(i))              liter.Remove(1, liter.Length - 1)                               Dim sex As New System.Text.StringBuilder(b(i))                 sex.Remove(3, sex.Length - 3)                 sex.Remove(0, 2)                                Dim gr As New System.Text.StringBuilder(b(i))                gr.Remove(8, gr.Length - 8)                gr.Remove(0, 4)                               Dim dr As New System.Text.StringBuilder(b(i))                 dr.Remove(15, dr.Length - 15)                 dr.Remove(0, 9)                              DataGridView1.Rows.Add(liter, sex, gr, dr, ik)и ничего не изменилось - скорость прежняя. Все ли я делаю правильно и есть ли действенный способ ускорить это безобразие? Заранее спасибо за ответ!

  1. Добрый день.Подскажите как сделать блокировку окна какой-нибудь программы,пока работает другая программа,которая создала эту блокировку,но после прекращения работы второй программы блокировка снималась.Заранее благодарен.

  1. Подскажите как правильно работать с потоками? Работаю с Serial Com Port, снимаю с него текстовые данные, как цикл выкинуть в отдельный поток? Как сделать чтобы другие кнопки формы не повисали? Форма не висла?vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35     Private Sub cb_start_Click(sender As Object, e As EventArgs) Handles cb_start.Click         If SerialPort1.IsOpen Then             SerialPort1.RtsEnable = False             SerialPort1.DtrEnable = False             SerialPort1.Close()             Application.DoEvents()         End If           With SerialPort1             .PortName = "COM5"             .BaudRate = 9600             .DataBits = 8             .Parity = 0             .StopBits = IO.Ports.StopBits.One             .WriteTimeout = 2000         End With           Try             SerialPort1.Open()         Catch ex As Exception             TextBox1.Text = ex.Message         End Try           While SerialPort1.IsOpen             SerialPort1.RtsEnable = True             Dim data_received As String = SerialPort1.ReadLine             If TextBox1.Text.Length > 1 Then                 TextBox1.Text = TextBox1.Text & vbCrLf & data_received 'give an alert when data received             Else                 TextBox1.Text = data_received 'give an alert when data received             End If             Application.DoEvents()         End While       End SubДобавлено через 9 минут Выкинул вот так, нет данных в Textbox1 или не работает!vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17         If SerialPort1.IsOpen Then Dim gData As New Thread(AddressOf GetData)       End Sub       Private Function GetData()         SerialPort1.RtsEnable = True         While SerialPort1.IsOpen             Dim data_received As String = SerialPort1.ReadLine             If TextBox1.Text.Length > 1 Then                 TextBox1.Text = TextBox1.Text & vbCrLf & data_received 'give an alert when data received             Else                 TextBox1.Text = data_received 'give an alert when data received             End If             Application.DoEvents()         End While         GetData = Nothing     End Function

  1. Помогите, люди добрые, побороть этого змия. Пытаюсь наладить работу RDLC-отчета в проекте VB.NET В окне FormRep расположен единственный элемент управления - ReportViewer. Код создания окна следующий:vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Public Module M_Rf_ac       '=================================================================================================='     '                                            PROCEDURE                                             '     '                                  Создание/активация формы RF                                     '     '=================================================================================================='       Public Sub RF_ac()         If Not FormRep_exist Then             FormRep = New RF               FormRep_exist = True               FormRep.Show()         End If           FormRep.MdiParent = Main           FormRep.Dock = DockStyle.Fill                 FormRep.WindowState = FormWindowState.Normal                 Call RF_ld()                 FormRep.Activate()             End Sub   End Modulevb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Public Module M_Rf_Ld       '=================================================================================================='     '                                            PROCEDURE                                             '     '                                  Создание/активация формы RF                                     '     '=================================================================================================='       Public Sub RF_Ld()         Dim Fnm As String                 DTS_GRD.Clear()                 Fnm = Corr_Path(gCurDir) + "DTS_GRD.XML"         Call Rd_DataSet_From_XML(DTS_GRD, Fnm, False, False, False)           If DTS_GRD.Tables.Contains("REL") Then             FormRep.RepViewer1.Reset()             FormRep.RepViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local             FormRep.RepViewer1.LocalReport.ReportEmbeddedResource = "Report2.rdlc"             FormRep.RepViewer1.LocalReport.ReportPath = "D:\A3.VB\PROJECT\Report2.rdlc"             FormRep.RepViewer1.LocalReport.DataSources.Clear()             FormRep.RepViewer1.LocalReport.DataSources.Add(New Microsoft.Reporting.WinForms.ReportDataSource("REL", DTS_GRD.Tables("REL")))               'MsgBox("LocalReport DataSources Count = " + CStr(FormRep.RepViewer1.LocalReport.DataSources.Count))               FormRep.RepViewer1.RefreshReport()         End If             End Sub   End ModuleФайл отчета - Report2.rdlc и XML схема источника данных - в RAR-архиве