Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ComboBox медлено загружает ... / 9 сообщений из 9, страница 1 из 1
24.03.2009, 12:19
    #35887786
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComboBox медлено загружает ...
Всем здравствуйте !

Столкнулся с проблемой при загрузки в комбо около 6000 записей,
где-то 10 сек., хотя из БД строку получаю почти за доли сек.

Вот мой код:

Ret ' Это переменная содержит строку данных с разделителями "|" типа :
a|b|c| ..... т.е. 6000 тыс. строк, каждая разделенная "|"
Код: plaintext
1.
2.
3.
    For cik =  1  To UBound(Split(Ret, "|"))
    cmbCatDen.AddItem Piece(Ret, "|", cik)
    Next cik
 

Как решить вопрос производительности загрузки в комбо ?

Спасибо .
...
Рейтинг: 0 / 0
24.03.2009, 12:45
    #35887877
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComboBox медлено загружает ...
Наверное нужно использовать Array , то бишь масив строк ....
Сейчас копаю .
...
Рейтинг: 0 / 0
24.03.2009, 12:56
    #35887920
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComboBox медлено загружает ...
Уверен, что тормозит функция Piece. Код в студию.
...
Рейтинг: 0 / 0
24.03.2009, 12:58
    #35887929
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComboBox медлено загружает ...
Вопрос снят !!!!


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Private Sub Command2_Click()
Dim Ret As String, Er As String
 
.
.
.

Dim fields() As String

fields() = Split(Ret, "|")

For i =  0  To UBound(fields)
    cmbCatDen.AddItem Trim$(fields(i))
Next

  
End Sub
...
Рейтинг: 0 / 0
24.03.2009, 12:58
    #35887931
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComboBox медлено загружает ...
желательно и побольше кода с вашим циклом явно не то. заранее вычислите размерность массива, да и массив желательно сразу получить, а не работать со строковой переменной каждый раз.
...
Рейтинг: 0 / 0
24.03.2009, 13:01
    #35887938
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComboBox медлено загружает ...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Private Sub Command2_Click()
Dim Ret As String, Er As String
 
.
.
.

Dim fields() As String
Dim L as Integer
Dim i as Integer

fields = Split(Ret, "|")
L=Ubound(fields)

With cmbCatDen
For i =  0  To L
    .AddItem Trim$(fields(i))
Next
End With
  
End Sub
...
Рейтинг: 0 / 0
24.03.2009, 13:47
    #35888145
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComboBox медлено загружает ...
Спасибо !
...
Рейтинг: 0 / 0
24.03.2009, 14:35
    #35888347
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComboBox медлено загружает ...
Если интерестно вот код моей функции (правда,очень давно написан):


Код: plaintext
1.
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.
Function Piece(chars As String, Delimiter As String, position As Long)
   
    If position <  1  Then
        Piece = ""
        Exit Function
    End If

    ReDim Where( 0  To position +  1 ) As Long
    Where( 0 ) =  1 
    current =  1 
    Length = Len(Delimiter)

    For Count =  1  To position
        Where(Count) = InStr(current, chars, Delimiter)
        If Where(Count) =  0  Then Where(Count) = Len(chars) +  1 
        current = Where(Count) + Len(Delimiter)
    Next Count
 
    If position =  1  Then
        Length =  0 
    End If
    
    If (Where(position) = Where(position -  1 )) Then
        back = ""
    Else
        back = Mid(chars, (Where(position -  1 ) + Length), (Where(position) - Where(position -  1 ) - Length))
    End If
    
    Piece = back

End Function
...
Рейтинг: 0 / 0
24.03.2009, 18:04
    #35889242
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComboBox медлено загружает ...
Я не увидел разницы в скорости между вычисляемой в цикле верхней границей цикла
Код: plaintext
For i =  0  To UBound(fields)
и заранее вычисленной верхней границей цикла:
Код: plaintext
1.
L=Ubound(fields)
For i =  0  To L
где L = 32000
Я думаю, что компилятор заботится о такой оптимизации самостоятельно.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ComboBox медлено загружает ... / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]