ďťż
 
=?iso-8859-2?Q?=5BVB6=5D_D=A3UGIE_optymalizacja...?= ďťż
 
=?iso-8859-2?Q?=5BVB6=5D_D=A3UGIE_optymalizacja...?=
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

=?iso-8859-2?Q?=5BVB6=5D_D=A3UGIE_optymalizacja...?=



BaGRoS - 17-03-2006 00:34
=?iso-8859-2?Q?=5BVB6=5D_D=A3UGIE_optymalizacja...?=
  Cześć!

Mam takie dane:
"<tr class=o2><td class=atc>J</td><td class=nc>GeForce 6200A Asus 256MB
(64-bit) TV/DVI BOX (AGPx8)</td><td class=c>180</td><td class=c>178</td><td
class=o>wersja BOX, obsługa DirectX 9.0, 128MB pamięci 64-bit, wyjście DVI i
wyjście video (S-video out), nVidia CineFX 3.0m nVidia Ultra Shadow
II</td><td class=n>jest</td><td class=n>36</td><td class=l2><a
href="http://www.ktr.pl/mapper.php?kod=GRGFX62AS62A256TD64B">4</a></td></tr>"

rozbijam je na części pierwsze:

START:

With KTR

'TU SIE BEDZIE DZIALO
'szukam początku a jednoczesnie promocji
txt = "<tr class=o2><td class="
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + Len(txt)
.Promocja = Mid(CennikTXT, POZ, 3)
'znam dlugosc wiec koniec PROMOCJI

'szukam nazwy
POZ = POZ + 3
txt = "<td class=n"
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + Len(txt)
'szukam poczatku napisu
txt = ">"
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + 1
'B będzie początkiem opisu
B = POZ
'szukam konca
txt = "</td>"
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + Len(txt)
.Nazwa = Mid(CennikTXT, B, A - B)
'koniec nazwy

'szukam Cena1
txt = "<td class=c"
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + Len(txt)
'szukam poczatku napisu
txt = ">"
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + 1
'B będzie początkiem opisu
B = POZ
'szukam konca
txt = "</td>"
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + Len(txt)
.Cena1 = Mid(CennikTXT, B, A - B)
'koniec Cena1

'szukam Cena2
txt = "<td class=c"
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + Len(txt)
'szukam poczatku napisu
txt = ">"
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + 1
'B będzie początkiem opisu
B = POZ
'szukam konca
txt = "</td>"
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + Len(txt)
.Cena2 = Mid(CennikTXT, B, A - B)
'koniec Cena2

'szukam Opis
txt = "<td class=o"
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + Len(txt)
'szukam poczatku napisu
txt = ">"
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + 1
'B będzie początkiem opisu
B = POZ
'szukam konca
txt = "</td>"
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + Len(txt)
.Opis = Mid(CennikTXT, B, A - B)
'koniec Opis

'szukam Dostepnosc
txt = "<td class=n"
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + Len(txt)
'szukam poczatku napisu
txt = ">"
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + 1
'B będzie początkiem opisu
B = POZ
'szukam konca
txt = "</td>"
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + Len(txt)
.Dostepnosc = Mid(CennikTXT, B, A - B)
'koniec Dostepnosc

'szukam Gwarancja
txt = "<td class=n"
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + Len(txt)
'szukam poczatku napisu
txt = ">"
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + 1
'B będzie początkiem opisu
B = POZ
'szukam konca
txt = "</td>"
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + Len(txt)
.Gwarancja = Mid(CennikTXT, B, A - B)
'koniec Gwarancja

'szukam Adres URL
txt = "<td class=l2>"
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + Len(txt)
'szukam poczatku napisu
txt = "<a href=" + Chr$(34)
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + Len(txt)
'B będzie początkiem opisu
B = POZ
'szukam konca
txt = Chr$(34) + ">4</a>"
A = InStr(POZ, CennikTXT, txt, vbTextCompare)
If A < 1 Then
GoTo KONIEC
End If
POZ = A + Len(txt)
.AdresURL = Mid(CennikTXT, B, A - B)
'z adresu biorę KOD
.KOD = Mid(.AdresURL, 34, Len(.AdresURL) - 33)
'koniec AdresURL i KOD

Towar = Towar + 1

'Debug.Print POZ, .Promocja, .Nazwa, .Cena1, .Cena2, .Opis,
..Dostepnosc, .Gwarancja, .AdresURL, .KOD

End With
frm_Start.lbl.Caption = "Towar numer:" + Str(Towar)
DoEvents
frm_Start.ProgressBar1.Value = POZ
GoTo START

KONIEC:

ktoś ma pomysł jak to przyspieszyć??!! Powiedzmy 10 krotnie :P
Len(txt) mógłbym powymieniać, troszkę by pomogło, lecz zbyt mało... W razie
zmiany szukanego txt automatycznie dobrze ustawi mi się długość.
Pomysły?

--
BaGRoS / GG#11282 / [at]tlen[dot]pl
PC=Athlon64/RAM 1GBTwinMos/HDD 420GB/LiteOn812->832/...
FOTO=CanonEOS300D->10D+KitII+50mm/f1.8+1GBPretecX80/CanonA60+128MB CF...
PocketPC=MDA III+1GB SD/Loox600+256MB SD+64MB CF





Artur S. - 17-03-2006 00:34

  BaGRoS napisał(a):
> Cześć!
>
[...]
Witam,
poczepiam się :)

1. Masz dużo niejawnych konwersji. Właściwie w każdej linii. A, POZ są
zadeklarowane? Masz Option Explicit ?
2. A<1 zmień na A=1
3. Mid zmień na Mid$
(powyższe punkty nie dadzą Ci czadu, ale będzie ładniej:) )
4. Stawiam na DoEvents. Pewnie robisz to w pętli 10tys. razy. Zakomentuj
i zobacz czy masz 10 czy tylko 7 razy szybciej ;) Jeśli to jest to, to
pozostanie Ci refresh labela i nie tak częste zmienianie wartości
ProgressBar.

Pozdrawiam
Artur S.

PS. i to brzydkie GoTo, ale jak chcesz szybko to niech zostanie...




BaGRoS - 17-03-2006 00:34
=?iso-8859-2?Q?Re:_=5BVB6=5D_D=A3UGIE_optymalizacja...?=
  Artur S. wrote:
> BaGRoS napisał(a):
>> Cześć!
>>
> [...]
> Witam,
> poczepiam się :)
>
> 1. Masz dużo niejawnych konwersji. Właściwie w każdej linii. A, POZ są
> zadeklarowane? Masz Option Explicit ?

tak na początku Option Explicit

Dim A, B, C, POZ As Long --- 7MB ma pliczek....
Dim Towar As Integer
Dim txt As String

> 2. A<1 zmień na A=1

ok

> 3. Mid zmień na Mid$
> (powyższe punkty nie dadzą Ci czadu, ale będzie ładniej:) )

jest

> 4. Stawiam na DoEvents. Pewnie robisz to w pętli 10tys. razy.

tak, ale i tak było wolno, tak widzialem ile już zrobił no i system działa
"normalnie :P"
wyświetlanie dla testu, progress też... nawet formatki nie potrzebuje

> Zakomentuj i zobacz czy masz 10 czy tylko 7 razy szybciej ;) Jeśli to
> jest to, to pozostanie Ci refresh labela i nie tak częste zmienianie
> wartości ProgressBar.

j/w

> Pozdrawiam
> Artur S.

> PS. i to brzydkie GoTo, ale jak chcesz szybko to niech zostanie...

Dzięki za odzew. Co myślisz gdyby napisać w C#/c++ bibliotekę do
przeszukiwania tych wartości? Może inny szybszy sposób?

--
BaGRoS / GG#11282 / [at]tlen[dot]pl
PC=Athlon64/RAM 1GBTwinMos/HDD 420GB/LiteOn812->832/...
FOTO=CanonEOS300D->10D+KitII+50mm/f1.8+1GBPretecX80/CanonA60+128MB CF...
PocketPC=MDA III+1GB SD/Loox600+256MB SD+64MB CF




Robert Winkler - 17-03-2006 00:34

  > tak na początku Option Explicit
>
> Dim A, B, C, POZ As Long --- 7MB ma pliczek....

Ta deklaracja oznacza w VB6 naprawdr cos takiego:

Dim A As Variant
Dim B As Variant
Dim C As Variant
Dim POZ As Long

Oczywiscie to drobiazg, ale pokazuje prawdziwe zachowanie VB6.
--
____________
Robert Winkler





BaGRoS - 17-03-2006 00:34
=?iso-8859-2?Q?Re:_=5BVB6=5D_D=A3UGIE_optymalizacja...?=
  Robert Winkler wrote:
>> tak na początku Option Explicit
>>
>> Dim A, B, C, POZ As Long --- 7MB ma pliczek....
>
> Ta deklaracja oznacza w VB6 naprawdr cos takiego:
>
> Dim A As Variant
> Dim B As Variant
> Dim C As Variant
> Dim POZ As Long
>
> Oczywiscie to drobiazg, ale pokazuje prawdziwe zachowanie VB6.

Ta zmiana (na LONG dla wszystkich :P) przyniosła zerowe (małe)
przyspieszenie przy 100 przejściach... Mam ich 12500 :/

--
BaGRoS / GG#11282 / [at]tlen[dot]pl
PC=Athlon64/RAM 1GBTwinMos/HDD 420GB/LiteOn812->832/...
FOTO=CanonEOS300D->10D+KitII+50mm/f1.8+1GBPretecX80/CanonA60+128MB CF...
PocketPC=MDA III+1GB SD/Loox600+256MB SD+64MB CF




Doker - 17-03-2006 00:34

  Jestem prawie pewien, ze instr przyjmuje twoj tekst jako argument ByVal
czyli robi sobie jego lokalna kopie co na marginesie jest głupie ale
wersja dla VB.net jest wlasnie taka wiec wnioskuje, ze wersja vb 6 tez
taka jest.

W takim razie napewno pomoze, jezeli najpierw podzielisz zrodlo danych
na mniejsze kawalki - po jednym rekordzie, a pozniej konkretne dane
wydzial z tych podstringow.

Wydaje mi sie, ze lepiej jesli uzyjesz do tego kolekcji niz mialbys
wielokrotnie robic Redim Preserve dla tabeli.




Doker - 17-03-2006 00:34

  I.. tak! Przepisanie do vb.net daloby znaczny wzrost predkosci
Mowie przepisanie, nie skopiowanie.




Skylla - 17-03-2006 00:34
=?iso-8859-2?Q?Re:_=5BVB6=5D_D=A3UGIE_optymalizacja...?=
  > Jestem prawie pewien, ze instr przyjmuje twoj tekst jako argument ByVal czyli
> robi sobie jego lokalna kopie co na marginesie jest głupie ale wersja dla
> VB.net jest wlasnie taka wiec wnioskuje, ze wersja vb 6 tez taka jest.

W VB6 domyslny jest ByRef :-)
S.




BaGRoS - 17-03-2006 00:34
=?iso-8859-2?Q?Re:_=5BVB6=5D_D=A3UGIE_optymalizacja...?=
  Doker wrote:
> I.. tak! Przepisanie do vb.net daloby znaczny wzrost predkosci
> Mowie przepisanie, nie skopiowanie.

Właśnie, jak na razie wczytywanie w .NET jest szybsze ...
Myślałem, że jakiś błąd! W VB6 wczytuje się 40 sek, w .NET 0.11 sek...

Nie wiem jak zastąpić
VB6:
Public KTR As TabKTR

Public Type TabKTR
Promocja As String
Nazwa As String
Cena1 As String
Cena2 As String
Opis As String
Dostepnosc As String
Gwarancja As String
AdresURL As String
KOD As String
End Type

i później

With KTR
.Promocja...
End With

?
Nie wiem co powiedzieć na tego .NET'a...

--
BaGRoS / GG#11282 / [at]tlen[dot]pl
PC=Athlon64/RAM 1GBTwinMos/HDD 420GB/LiteOn812->832/...
FOTO=CanonEOS300D->10D+KitII+50mm/f1.8+1GBPretecX80/CanonA60+128MB CF...
PocketPC=MDA III+1GB SD/Loox600+256MB SD+64MB CF




BaGRoS - 17-03-2006 00:34
=?iso-8859-2?Q?Re:_=5BVB6=5D_D=A3UGIE_optymalizacja...?=
  BaGRoS wrote:
> Doker wrote:
>> I.. tak! Przepisanie do vb.net daloby znaczny wzrost predkosci
>> Mowie przepisanie, nie skopiowanie.
>
> Właśnie, jak na razie wczytywanie w .NET jest szybsze ...
> Myślałem, że jakiś błąd! W VB6 wczytuje się 40 sek, w .NET 0.11 sek...
>
> Nie wiem jak zastąpić
> VB6:
> Public KTR As TabKTR
>
> Public Type TabKTR
> Promocja As String
> Nazwa As String
> Cena1 As String
> Cena2 As String
> Opis As String
> Dostepnosc As String
> Gwarancja As String
> AdresURL As String
> KOD As String
> End Type
>
> i później
>
> With KTR
> .Promocja...
> End With

Już wiem, że działa tak samo :/ sorki
W .NET przejście przez wszystko zajęło 15.65sekundy... (w edytorze) (11597
pozycji)
W VB6 przejście przez 100 pozycji zajęło 260sekund... (po kompilacji)
jeśli ktoś by się zastanawiał....

--
BaGRoS / GG#11282 / [at]tlen[dot]pl
PC=Athlon64/RAM 1GBTwinMos/HDD 420GB/LiteOn812->832/...
FOTO=CanonEOS300D->10D+KitII+50mm/f1.8+1GBPretecX80/CanonA60+128MB CF...
PocketPC=MDA III+1GB SD/Loox600+256MB SD+64MB CF




Doker - 17-03-2006 00:34

  Skylla napisał(a):
>> Jestem prawie pewien, ze instr przyjmuje twoj tekst jako argument
>> ByVal czyli robi sobie jego lokalna kopie co na marginesie jest głupie
>> ale wersja dla VB.net jest wlasnie taka wiec wnioskuje, ze wersja vb 6
>> tez taka jest.
>
> W VB6 domyslny jest ByRef :-)
> S.
>
a jesli tak to spoko.




Doker - 17-03-2006 00:34

  Spoko. Tylko long zastap przez Integer
a len(text) przez text.length
instr(text, igla) przez text.indexof(igla)
pamietajac ze wynik jest 0-indeksowany.
Jest szansa, ze nastapi dodatkowy wzrost predkosci.




BaGRoS - 17-03-2006 00:34
=?iso-8859-2?Q?Re:_=5BVB6=5D_D=A3UGIE_optymalizacja...?=
  Doker wrote:
> Spoko. Tylko long zastap przez Integer
> a len(text) przez text.length
> instr(text, igla) przez text.indexof(igla)
> pamietajac ze wynik jest 0-indeksowany.
> Jest szansa, ze nastapi dodatkowy wzrost predkosci.

Następuje :D
i dodatkowo idąc za ciosem
Mid(CennikTXT, B, A - B)

na

CennikTXT.Substring(B, A - B)

--
BaGRoS / GG#11282 / [at]tlen[dot]pl
PC=Athlon64/RAM 1GBTwinMos/HDD 420GB/LiteOn812->832/...
FOTO=CanonEOS300D->10D+KitII+50mm/f1.8+1GBPretecX80/CanonA60+128MB CF...
PocketPC=MDA III+1GB SD/Loox600+256MB SD+64MB CF




InDesign Scripts - 18-03-2006 01:17

  moze najpierw dokonaj paru Replace ...
uprosc strukture tego ...
i uzywaj Split do wyciagania informacji ...
czy to jest w miare usystematyzowana struktura ??
moze dalo by sie z tego za pomoca Split wypelnic TreeView ??

robin




Grzegorz Danowski - 18-03-2006 01:17
=?iso-8859-2?Q?Re:_=5BVB6=5D_D=A3UGIE_optymalizacja...?=
  Użytkownik "BaGRoS" <bagros@o2.pl> napisał w wiadomości
news:dvc7o9$m9a$1@nemesis.news.tpi.pl...
> Cześć!
>
> Mam takie dane:
> "<tr class=o2><td class=atc>J</td><td class=nc>GeForce 6200A Asus 256MB
> (64-bit) TV/DVI BOX (AGPx8)</td><td class=c>180</td><td
> class=c>178</td><td class=o>wersja BOX, obsługa DirectX 9.0, 128MB pamięci
> 64-bit, wyjście DVI i wyjście video (S-video out), nVidia CineFX 3.0m
> nVidia Ultra Shadow II</td><td class=n>jest</td><td class=n>36</td><td
> class=l2><a
> href="http://www.ktr.pl/mapper.php?kod=GRGFX62AS62A256TD64B">4</a></td></tr>"
>

A dlaczego nie użyjesz wyrażeń regularnych? Wydaje mi się, że jeśli nawet
nie będą działać szybciej (sprawdź), to chociaż utrzymanie kodu będzie
prostsze.

Poniżej przykładzik, mam nadzieję, że ci się przyda.

Imports System.Text.RegularExpressions

Module Module1

Sub Main()
TestData()
Console.ReadLine()
End Sub

Public Sub TestData()
Dim data As String

data = "<tr class=o2><td class=atc>J</td><td class=nc>GeForce 6200A
Asus 256MB " & _
"(64-bit) TV/DVI BOX (AGPx8)</td><td class=c>180</td><td
class=c>178</td><td " & _
"class=o>wersja BOX, obsługa DirectX 9.0, 128MB pamięci 64-bit,
wyjście DVI i " & _
"wyjście video (S-video out), nVidia CineFX 3.0m nVidia Ultra
Shadow " & _
"II</td><td class=n>jest</td><td class=n>36</td><td class=l2><a
" & _
"href=""http://www.ktr.pl/mapper.php?kod=GRGFX62AS62A256TD64B"">4</a></td></tr>"

Console.WriteLine("Start: " + DateTime.Now.ToLongTimeString)

For i As Int32 = 1 To 10000
TestRegex(data)
Next

Console.WriteLine("End: " + DateTime.Now.ToLongTimeString)
End Sub

Public Sub TestRegex(ByVal input As String)
Dim reg As Regex
Dim pattern As String

pattern = "\<tr\s class=o2\>\<td\sclass\=" & _
"(?<Promocja>[a-z].*?)" & _
"\>.*\<td\s class=nc>" & _
"(?<Nazwa>.*?)" & _
"\</td\>\<td\s class=c\>" & _
"(?<Cena>.*?)" & _
"\</td\>\<td\s class=c\>" & _
"(?<Cena2>.*?)" & _
"\</td\>\<td\s class=o>" & _
"(?<Opis>.*?)" & _
"\</td\>\<td\s class=n>" & _
"(?<Dostepnosc>.*?)" & _
"\</td\>\<td\s class=n>" & _
"(?<Gwarancja>.*?)" & _
"\</td\>\<td\s class=l2>\<a\s href=""" & _
"(?<PoczatekUrl>.*)" & _
"(?<=kod=)(?<kod>.*)" & _
"\""\>4"

reg = New Regex(pattern, RegexOptions.Compiled + _
RegexOptions.IgnorePatternWhitespace)

Dim resultMath As Match = reg.Match(input)

'Console.WriteLine(resultMath.Groups("Promocja").V alue)
'Console.WriteLine(resultMath.Groups("Nazwa").Valu e)
'Console.WriteLine(resultMath.Groups("Cena").Value )
'Console.WriteLine(resultMath.Groups("Cena2").Valu e)
'Console.WriteLine(resultMath.Groups("Opis").Value )
'Console.WriteLine(resultMath.Groups("Dostepnosc") .Value)
'Console.WriteLine(resultMath.Groups("Gwarancja"). Value)
'Console.WriteLine(resultMath.Groups("PoczatekUrl" ).Value + _
' resultMath.Groups("kod").Value)
'Console.WriteLine(resultMath.Groups("kod").Value)
End Sub
End Module

Pozdrawiam
Grzegorz




Grzegorz Danowski - 18-03-2006 01:17
=?iso-8859-2?Q?Re:_=5BVB6=5D_D=A3UGIE_optymalizacja...?=
  Użytkownik "Grzegorz Danowski" <gdn__na@serwerze__poczta.onet.pl> napisał w
wiadomości news:dve5dr$l8$1@inews.gazeta.pl...
(...)
>
> A dlaczego nie użyjesz wyrażeń regularnych? Wydaje mi się, że jeśli nawet
> nie będą działać szybciej (sprawdź), to chociaż utrzymanie kodu będzie
> prostsze.
>
(...)
> reg = New Regex(pattern, RegexOptions.Compiled + _
> RegexOptions.IgnorePatternWhitespace)
>
> Dim resultMath As Match = reg.Match(input)
>
> End Module
>

Jeśli w danych źródłowych masz wiele rekordów, to możesz za pomocą wyrażeń
regularnych znaleźć wszystkie modyfikując nieco powyższy kod, np.:

Dim resultMatches As MatchCollection = reg.Matches(input)

For Each resultMatch As Match In resultMatches

Console.WriteLine(resultMatch.Groups("Promocja").V alue)
Console.WriteLine(resultMatch.Groups("Nazwa").Valu e)
'... itd.
Next

lub, co może być bardziej "responsible" (bo w powyższym rozwiązaniu musisz
czekać, aż Regex znajdzie wszystkie wystąpienia) skorzystaj z
resultMatch.NextMatch, która zwraca kolejne wystąpienie.

Pozdrawiam
Grzegor




BaGRoS - 20-03-2006 01:31
=?iso-8859-2?Q?Re:_=5BVB6=5D_D=A3UGIE_optymalizacja...?=
  Grzegorz Danowski wrote:
> Użytkownik "BaGRoS" <bagros@o2.pl> napisał w wiadomości
> news:dvc7o9$m9a$1@nemesis.news.tpi.pl...
>> Public Sub TestRegex(ByVal input As String)
> Dim reg As Regex
> Dim pattern As String

Error 2 Type 'Regex' is not defined.
D:\ConsoleApplication1\ConsoleApplication1\Module1 .vb 50 19
ConsoleApplication1

hmm
na laptopie śmiga, na stacjonarce nie :|

--
BaGRoS / GG#11282 / [at]tlen[dot]pl
PC=Athlon64/RAM 1GBTwinMos/HDD 420GB/LiteOn812->832/...
FOTO=CanonEOS300D->10D+KitII+50mm/f1.8+1GBPretecX80/CanonA60+128MB CF...
PocketPC=MDA III+1GB SD/Loox600+256MB SD+64MB CF




BaGRoS - 20-03-2006 01:31
=?iso-8859-2?Q?Re:_=5BVB6=5D_D=A3UGIE_optymalizacja...?=
  > Error 2 Type 'Regex' is not defined.
> D:\ConsoleApplication1\ConsoleApplication1\Module1 .vb 50 19
> ConsoleApplication1

nie było tematu moja wina :/

--
BaGRoS / GG#11282 / [at]tlen[dot]pl
PC=Athlon64/RAM 1GBTwinMos/HDD 420GB/LiteOn812->832/...
FOTO=CanonEOS300D->10D+KitII+50mm/f1.8+1GBPretecX80/CanonA60+128MB CF...
PocketPC=MDA III+1GB SD/Loox600+256MB SD+64MB CF




BaGRoS - 20-03-2006 01:31
=?iso-8859-2?Q?Re:_=5BVB6=5D_D=A3UGIE_optymalizacja...?=
  Grzegorz Danowski wrote:
> Użytkownik "BaGRoS" <bagros@o2.pl> napisał w wiadomości
> news:dvc7o9$m9a$1@nemesis.news.tpi.pl...
>> Cześć!
>>
>> Mam takie dane:
>> "<tr class=o2><td class=atc>J</td><td class=nc>GeForce 6200A Asus
>> 256MB (64-bit) TV/DVI BOX (AGPx8)</td><td class=c>180</td><td
>> class=c>178</td><td class=o>wersja BOX, obsługa DirectX 9.0, 128MB
>> pamięci 64-bit, wyjście DVI i wyjście video (S-video out), nVidia
>> CineFX 3.0m nVidia Ultra Shadow II</td><td class=n>jest</td><td
>> class=n>36</td><td class=l2><a
>> href="http://www.ktr.pl/mapper.php?kod=GRGFX62AS62A256TD64B">4</a></td></tr>"
>>
>
> A dlaczego nie użyjesz wyrażeń regularnych? Wydaje mi się, że jeśli
> nawet nie będą działać szybciej (sprawdź), to chociaż utrzymanie kodu
> będzie
> prostsze.
>
> Poniżej przykładzik, mam nadzieję, że ci się przyda.
>
> Imports System.Text.RegularExpressions
>
> Module Module1
>
> Sub Main()
> TestData()
> Console.ReadLine()
> End Sub
>
> Public Sub TestData()
> Dim data As String
>
> data = "<tr class=o2><td class=atc>J</td><td class=nc>GeForce
> 6200A Asus 256MB " & _
> "(64-bit) TV/DVI BOX (AGPx8)</td><td class=c>180</td><td
> class=c>178</td><td " & _
> "class=o>wersja BOX, obsługa DirectX 9.0, 128MB pamięci
> 64-bit, wyjście DVI i " & _
> "wyjście video (S-video out), nVidia CineFX 3.0m nVidia
> Ultra Shadow " & _
> "II</td><td class=n>jest</td><td class=n>36</td><td
> class=l2><a " & _
>
> "href=""http://www.ktr.pl/mapper.php?kod=GRGFX62AS62A256TD64B"">4</a></td></tr>"
>
> Console.WriteLine("Start: " + DateTime.Now.ToLongTimeString)
>
> For i As Int32 = 1 To 10000
> TestRegex(data)
> Next
>
> Console.WriteLine("End: " + DateTime.Now.ToLongTimeString)
> End Sub
>
> Public Sub TestRegex(ByVal input As String)
> Dim reg As Regex
> Dim pattern As String
>
> pattern = "\<tr\s class=o2\>\<td\sclass\=" & _
> "(?<Promocja>[a-z].*?)" & _
> "\>.*\<td\s class=nc>" & _
> "(?<Nazwa>.*?)" & _
> "\</td\>\<td\s class=c\>" & _
> "(?<Cena>.*?)" & _
> "\</td\>\<td\s class=c\>" & _
> "(?<Cena2>.*?)" & _
> "\</td\>\<td\s class=o>" & _
> "(?<Opis>.*?)" & _
> "\</td\>\<td\s class=n>" & _
> "(?<Dostepnosc>.*?)" & _
> "\</td\>\<td\s class=n>" & _
> "(?<Gwarancja>.*?)" & _
> "\</td\>\<td\s class=l2>\<a\s href=""" & _
> "(?<PoczatekUrl>.*)" & _
> "(?<=kod=)(?<kod>.*)" & _
> "\""\>4"
>
> reg = New Regex(pattern, RegexOptions.Compiled + _
> RegexOptions.IgnorePatternWhitespace)
>
> Dim resultMath As Match = reg.Match(input)
>
> 'Console.WriteLine(resultMath.Groups("Promocja").V alue)
> 'Console.WriteLine(resultMath.Groups("Nazwa").Valu e)
> 'Console.WriteLine(resultMath.Groups("Cena").Value )
> 'Console.WriteLine(resultMath.Groups("Cena2").Valu e)
> 'Console.WriteLine(resultMath.Groups("Opis").Value )
> 'Console.WriteLine(resultMath.Groups("Dostepnosc") .Value)
> 'Console.WriteLine(resultMath.Groups("Gwarancja"). Value)
> 'Console.WriteLine(resultMath.Groups("PoczatekUrl" ).Value + _
> ' resultMath.Groups("kod").Value)
> 'Console.WriteLine(resultMath.Groups("kod").Value)
> End Sub
> End Module
>

Czas
Start: 21:00:27
End: 21:03:51
po kompilacji

moja procedurka po kompilacji
4.72 sekundy (11597 pozycji zamiast 10 000 twoich)

--
BaGRoS / GG#11282 / [at]tlen[dot]pl
PC=Athlon64/RAM 1GBTwinMos/HDD 420GB/LiteOn812->832/...
FOTO=CanonEOS300D->10D+KitII+50mm/f1.8+1GBPretecX80/CanonA60+128MB CF...
PocketPC=MDA III+1GB SD/Loox600+256MB SD+64MB CF




Grzegorz Danowski - 20-03-2006 01:31
=?iso-8859-2?Q?Re:_=5BVB6=5D_D=A3UGIE_optymalizacja...?=
  Użytkownik "BaGRoS" <bagros@o2.pl> napisał w wiadomości
news:dvkdsk$mqm$1@nemesis.news.tpi.pl...
(...)
>> A dlaczego nie użyjesz wyrażeń regularnych? Wydaje mi się, że jeśli
>> nawet nie będą działać szybciej (sprawdź), to chociaż utrzymanie kodu
>> będzie
>> prostsze.
>>
>> Poniżej przykładzik, mam nadzieję, że ci się przyda.
(...)
> Czas
> Start: 21:00:27
> End: 21:03:51
> po kompilacji

Jestem bardzo zaskoczony - na moim laptopie uzyskiwałem czasy poniżej 4
sekund, a tu nagle u ciebie ponad 3 minuty.
G.




Grzegorz Danowski - 20-03-2006 01:31
=?iso-8859-2?Q?Re:_=5BVB6=5D_D=A3UGIE_optymalizacja...?=
  Użytkownik "Grzegorz Danowski" <gdn__na@serwerze__poczta.onet.pl> napisał w
wiadomości news:dvkk1m$p5v$1@inews.gazeta.pl...
(...)
>>> A dlaczego nie użyjesz wyrażeń regularnych? Wydaje mi się, że jeśli
>>> nawet nie będą działać szybciej (sprawdź), to chociaż utrzymanie kodu
>>> będzie
>>> prostsze.
>>>
>>> Poniżej przykładzik, mam nadzieję, że ci się przyda.
> (...)
>> Czas
>> Start: 21:00:27
>> End: 21:03:51
>> po kompilacji
>
> Jestem bardzo zaskoczony - na moim laptopie uzyskiwałem czasy poniżej 4
> sekund, a tu nagle u ciebie ponad 3 minuty.

Zrobiłem jeszcze jeden test:
do pliku (InputFile.txt) wrzuciłem 16 tys. rekordów takich jak podałeś w
swoim mailu (każdy rekord w osobnym wierszu, bez enterów wewnątrz rekordu) i
następnie uruchomiłem następującą procedurę (korzysta z poprzednio podanego
kodu):

Public Sub TestDataFromFile()
Console.WriteLine("Start: " + DateTime.Now.ToString("mm:ss:ffff"))

Dim myStream As New IO.StreamReader("InputFile.txt")
TestRegex(myStream.ReadToEnd())

Console.WriteLine("End: " + DateTime.Now.ToString("mm:ss:ffff"))
End Sub

No i te 16 tys. wierszy (prawie 7MB) było przeszukiwane w czasie poniżej 3
sekund.
G.




Grzegorz Danowski - 21-03-2006 01:02
=?iso-8859-2?Q?Re:_=5BVB6=5D_D=A3UGIE_optymalizacja...?=
  Użytkownik "Grzegorz Danowski" <gdn__na@serwerze__poczta.onet.pl> napisał w
wiadomości news:dvknh4$djt$1@inews.gazeta.pl...
(...)
>>>> A dlaczego nie użyjesz wyrażeń regularnych? Wydaje mi się, że jeśli
>>>> nawet nie będą działać szybciej (sprawdź), to chociaż utrzymanie kodu
>>>> będzie
>>>> prostsze.
>>>>
>>>> Poniżej przykładzik, mam nadzieję, że ci się przyda.
>> (...)
>>> Czas
>>> Start: 21:00:27
>>> End: 21:03:51
>>> po kompilacji
>>
>> Jestem bardzo zaskoczony - na moim laptopie uzyskiwałem czasy poniżej 4
>> sekund, a tu nagle u ciebie ponad 3 minuty.
>
> Zrobiłem jeszcze jeden test:

Nieco zmodyfikowane oba testy (string i plik) można ściągnąć stąd:
http://www.gdnkonsulting.waw.pl/Down...styRegesVB.zip

Jeśli ktoś ma chwilkę czasu, to proszę o podanie osiąganych czasów. Tak jak
pisałem wcześniej, u mnie na laptopie stary Celeron 2k, 512 MB RAM, wiele
aplikacji uruchomionych w tle, oba testy wykonują się poniżej 3 sekund.

Zmieniłem też troszkę samo wyrażenie regularne (po wyrzuceniu opcji
RegexOptions.IgnorePatternWhitespace mogłem usunąć \s, co utrudniało jego
zrozumienia).

Pozdrawiam
Grzegorz




BaGRoS - 22-03-2006 00:08
=?iso-8859-2?Q?Re:_=5BVB6=5D_D=A3UGIE_optymalizacja...?=
  Grzegorz Danowski wrote:
> Użytkownik "BaGRoS" <bagros@o2.pl> napisał w wiadomości
> news:dvkdsk$mqm$1@nemesis.news.tpi.pl...
> (...)
>>> A dlaczego nie użyjesz wyrażeń regularnych? Wydaje mi się, że jeśli
>>> nawet nie będą działać szybciej (sprawdź), to chociaż utrzymanie
>>> kodu będzie
>>> prostsze.
>>>
>>> Poniżej przykładzik, mam nadzieję, że ci się przyda.
> (...)
>> Czas
>> Start: 21:00:27
>> End: 21:03:51
>> po kompilacji
>
> Jestem bardzo zaskoczony - na moim laptopie uzyskiwałem czasy poniżej
> 4 sekund, a tu nagle u ciebie ponad 3 minuty.
> G.

teraz:
[1] test odczytu z pliku
[2] test stringu
[0] koniec
1
Start: 45:59:2783
Liczba znalezionych rekordów: 16384
GeForce 6200A Asus 256MB (64-bit) TV/DVI BOX (AGPx8)
End: 46:00:3096

[1] test odczytu z pliku
[2] test stringu
[0] koniec
2
Start: 46:01:7783
GeForce 6200A Asus 256MB (64-bit) TV/DVI BOX (AGPx8)
End: 46:02:4033

[1] test odczytu z pliku
[2] test stringu
[0] koniec

nie wiem dlaczego tak długo wcześniej...

--
BaGRoS / GG#11282 / [at]tlen[dot]pl
PC=Athlon64/RAM 1GBTwinMos/HDD 420GB/LiteOn812->832/...
FOTO=CanonEOS300D->10D+KitII+50mm/f1.8+1GBPretecX80/CanonA60+128MB CF...
PocketPC=MDA III+1GB SD/Loox600+256MB SD+64MB CF




BaGRoS - 22-03-2006 00:08
=?iso-8859-2?Q?Re:_=5BVB6=5D_D=A3UGIE_optymalizacja...?=
  Grzegorz Danowski wrote:
> Użytkownik "Grzegorz Danowski" <gdn__na@serwerze__poczta.onet.pl>
> napisał w wiadomości news:dvknh4$djt$1@inews.gazeta.pl...
> (...)
>>>>> A dlaczego nie użyjesz wyrażeń regularnych? Wydaje mi się, że
>>>>> jeśli nawet nie będą działać szybciej (sprawdź), to chociaż
>>>>> utrzymanie kodu będzie
>>>>> prostsze.
>>>>>
>>>>> Poniżej przykładzik, mam nadzieję, że ci się przyda.
>>> (...)
>>>> Czas
>>>> Start: 21:00:27
>>>> End: 21:03:51
>>>> po kompilacji
>>>
>>> Jestem bardzo zaskoczony - na moim laptopie uzyskiwałem czasy
>>> poniżej 4 sekund, a tu nagle u ciebie ponad 3 minuty.
>>
>> Zrobiłem jeszcze jeden test:
>
> Nieco zmodyfikowane oba testy (string i plik) można ściągnąć stąd:
> http://www.gdnkonsulting.waw.pl/Down...styRegesVB.zip

Nie mogę tego wczytać do
Microsoft Visual Studio 2005
Version 8.0.50727.42 (RTM.050727-4200)
Microsoft .NET Framework
Version 2.0.50727

Installed Edition: VB Express

....
:(

--
BaGRoS / GG#11282 / [at]tlen[dot]pl
PC=Athlon64/RAM 1GBTwinMos/HDD 420GB/LiteOn812->832/...
FOTO=CanonEOS300D->10D+KitII+50mm/f1.8+1GBPretecX80/CanonA60+128MB CF...
PocketPC=MDA III+1GB SD/Loox600+256MB SD+64MB CF




Grzegorz Danowski - 22-03-2006 00:08
=?iso-8859-2?Q?Re:_=5BVB6=5D_D=A3UGIE_optymalizacja...?=
  Użytkownik "BaGRoS" <bagros@o2.pl> napisał w wiadomości
news:dvpiie$885$1@atlantis.news.tpi.pl...
(...)
>>
>> Nieco zmodyfikowane oba testy (string i plik) można ściągnąć stąd:
>> http://www.gdnkonsulting.waw.pl/Down...styRegesVB.zip
>
> Nie mogę tego wczytać do
> Microsoft Visual Studio 2005
> Version 8.0.50727.42 (RTM.050727-4200)
> Microsoft .NET Framework
> Version 2.0.50727
>
> Installed Edition: VB Express
>

Niestety nie mam VB Express, więc nie mogę tego sprawdzić. Proponuję byś
otworzył notatnikiem plik Module1.vb, skopiował całą zawartość i wkleił do
nowej aplikacji konsolowej VB.NET 2005. Może to wystarczy, a może nie -
spróbuj :-). A swoją drogą to dziwne, że VB Express nie czyta aplikacji
VB.NET 2003 - jak próbowałem zrobić coś podobnego w C# Expressie to mi się
udało i to w przypadku dużo bardziej skomplikowanej aplikacji.

Pozdrawiam
Grzegorz




BaGRoS - 22-03-2006 00:08
=?iso-8859-2?Q?Re:_=5BVB6=5D_D=A3UGIE_optymalizacja...?=
  Grzegorz Danowski wrote:
> Użytkownik "BaGRoS" <bagros@o2.pl> napisał w wiadomości
> news:dvpiie$885$1@atlantis.news.tpi.pl...
> (...)
>>>
>>> Nieco zmodyfikowane oba testy (string i plik) można ściągnąć stąd:
>>> http://www.gdnkonsulting.waw.pl/Down...styRegesVB.zip
>>
>> Nie mogę tego wczytać do
>> Microsoft Visual Studio 2005
>> Version 8.0.50727.42 (RTM.050727-4200)
>> Microsoft .NET Framework
>> Version 2.0.50727
>>
>> Installed Edition: VB Express
>>
>
> Niestety nie mam VB Express, więc nie mogę tego sprawdzić. Proponuję
> byś otworzył notatnikiem plik Module1.vb, skopiował całą zawartość i
> wkleił do nowej aplikacji konsolowej VB.NET 2005. Może to wystarczy,
> a może nie - spróbuj :-). A swoją drogą to dziwne, że VB Express nie
> czyta aplikacji VB.NET 2003 - jak próbowałem zrobić coś podobnego w
> C# Expressie to mi się udało i to w przypadku dużo bardziej
> skomplikowanej aplikacji.

Mogę tak wkleić, lecz działa wolno... Jak opisałem.

--
BaGRoS / GG#11282 / [at]tlen[dot]pl
PC=Athlon64/RAM 1GBTwinMos/HDD 420GB/LiteOn812->832/...
FOTO=CanonEOS300D->10D+KitII+50mm/f1.8+1GBPretecX80/CanonA60+128MB CF...
PocketPC=MDA III+1GB SD/Loox600+256MB SD+64MB CF




Grzegorz Danowski - 22-03-2006 00:08
=?iso-8859-2?Q?Re:_=5BVB6=5D_D=A3UGIE_optymalizacja...?=
  Użytkownik "BaGRoS" <bagros@o2.pl> napisał w wiadomości
news:dvplpr$8jq$1@nemesis.news.tpi.pl...
>> Proponuję
>> byś otworzył notatnikiem plik Module1.vb, skopiował całą zawartość i
>> wkleił do nowej aplikacji konsolowej VB.NET 2005. Może to wystarczy,
>> a może nie - spróbuj :-). A swoją drogą to dziwne, że VB Express nie
>> czyta aplikacji VB.NET 2003 - jak próbowałem zrobić coś podobnego w
>> C# Expressie to mi się udało i to w przypadku dużo bardziej
>> skomplikowanej aplikacji.
>
> Mogę tak wkleić, lecz działa wolno... Jak opisałem.
>

A więc miejmy nadzieję, że odezwie się jakiś ekspert od VB.NET 2005 i
wyjaśni dlaczego tak się dzieje. Ja zrobiłem wersję w C# Express (do
pobrania: http://www.gdnkonsulting.waw.pl/Down.../TestRegex.zip) i
ta działa równie szybko jak wersja w VB.NET 2003 (jeśli nie szybciej).

Pozdrawiam
Grzegorz
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Wydajność baz danych w zależności od poziomu izolacji ANSI/ISO Czy zna (obsługuje) ktoś program Iso Draw ? MYSQL - kodowanie w ISO-PL strona plus baza w iso do utf-8 Kodowanie: z iso na utf Konwesja znaków w dump'ie bazy danych - ISO -> utf-8 -> ISO -> utf-8 =?iso-8859-2?q?Co_oznacza_b=B3=B1d_Warning:_mysql=5Fconnect() _[function.mysql-connect]:_Can't_connect_to_local_MySQL_server_through_sock et_'/var/run/mysqld/mysqld.sock'_(2)_in?= =?iso-8859-2?q?Informatyka,_Java,_EJB,_Ajax,_Spring=2E_Czy=BF by_to_koniec_=B6wiata,_czy_te=BF_nasze_uczelnie_b= EAd=B1_uczy=B3y_w_ko=F1cu!_czego_praktycznego_=2E= 2E=2E=2E?= =?iso-8859-2?q?Ati_Mobility_Radeon_X300_W_Notebooku_Jak_Zwi=E Akszy=E6_Ilo=B6=E6_Grafiki_Poprzez_Wsp=F3=B3dziele nie_Z_Ramu=3F=3F=3F?= =?ISO-8859-2?Q?=AFegnam_si=EA=2E=2E=2E?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • tejsza.htw.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com