Почему тормозит VB

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Почему тормозит VB

Сообщение Avtopic » 03.07.2007 (Вт) 14:24

Здравствуйте!
Можете объяснить, почему может тормозить VB

два проекта:
1. VBA
Код: Выделить всё
Set db = OpenDatabase(Ph & "Link_map.mdb")
    Set r = db.OpenRecordset(Strng)
    ...
    Cells(5, 5).CopyFromRecordset r

2. VB
в референсах Excel и Dao
Excel открыт, и WSht = Sheet1
Код: Выделить всё
Set db = OpenDatabase(Ph & "Link_map.mdb")
    Set r = db.OpenRecordset(Strng)
    ...
    WSht.Cells(5, 5).CopyFromRecordset r
код во втором занимает три раза больше времени, чем в первом, хотя связывание раннее.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 03.07.2007 (Вт) 14:57

Очевидно, потому что VBA работает в процессе Excel и нет нужды таскать данные из процесса в процесс.
Изображение

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 04.07.2007 (Ср) 19:24

Проблему решил следующими действиями

Код: Выделить всё
    ThreadID_Fr = GetWindowThreadProcessId(Form_hWnd, ByVal 0&)
    ThreadID_Ex = GetWindowThreadProcessId(Excel_hWnd, ByVal 0&)
    Call AttachThreadInput(ThreadID_Fr, ThreadID_Ex, True)
    SetActiveWindow   Excel_hWnd

    '...мои действия с рекордсетом и c заполнением листа

    Call AttachThreadInput(ThreadID_Fr, ThreadID_Ex, False)
Но почему это помогло не пойму.
Помогает не AttachThreadInput, она нужна только для SetActiveWindow, которая и помогает.
:?:

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 05.07.2007 (Чт) 9:50

Потому что винда самостоятельно перераспределяет ресурсы системы между процессами и отдает приоритет обладателю активного окна. Давно не активировашиеся процессы может вообще из оперативки на винт сбросить.
Лучший способ понять что-то самому — объяснить это другому.

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 05.07.2007 (Чт) 12:30

Спасибо Antonariy, думал обо всем, но об этом не подумал.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот, Yandex-бот и гости: 58

    TopList