Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Профилер для Access  [new]
Green2
Member

Откуда: skype: green2x2
Сообщений: 13748
Я тут сделал клиента на Access, сливает данные из текстов в SQL Server

тексты -> Access(регулярные выражения) -> SQL Server.

Перед этим я сделал то же с помощью DTS и Java Script на SQL Server. (Тут же пришлось переделать, потому что перелив надо делать на клиенте)


И у меня получилось, что DTS справляется с 1 порцией данных за 15 минут, а Access с такой же порцией за 1 час. Алгоритм 1 в 1

Какие средства оптимизации кода можно тут применить, чтобы ускорить выполнение программы?

Знаю, что для С ++ придуманы такие программы как профилеры.

В итоге их работы получается, что


#include <stdio.h>
void main()
{
int i;
printf("\n"); 0.001 сек
for(i=0;i<10;i++) 0.1 сек
{
printf("%d",i); 2 сек
printf("Hello World!\n"); 6 сек
} 0.01 сек
}
всего 8.102 сек


Из этого видно, что если printf("Hello World!\n"); выкинуть, то программа отработает за 2.202 сек, и таким образом ускорится.

Есть ли подобные программы для Access?
14 апр 04, 13:27    [628168]     Ответить | Цитировать Сообщить модератору
 Re: Профилер для Access  [new]
Green2
Member

Откуда: skype: green2x2
Сообщений: 13748
В форуме только profiler SQL Server'a упоминается.

На VB тоже только он.

Неужели никто не профилирует свои программы?

Или вы в первый раз о профилерах услыхали?
14 апр 04, 13:55    [628327]     Ответить | Цитировать Сообщить модератору
 Re: Профилер для Access  [new]
ищ
Guest
в первый раз
14 апр 04, 14:04    [628368]     Ответить | Цитировать Сообщить модератору
 Re: Профилер для Access  [new]
Senin Viktor
Member

Откуда: Подмосковье
Сообщений: 5006
Ручками расставляешь свои "таймеры" в критичных кусках кода
14 апр 04, 14:06    [628374]     Ответить | Цитировать Сообщить модератору
 Re: Профилер для Access  [new]
Green2
Member

Откуда: skype: green2x2
Сообщений: 13748
Диагноз - http://www.rambler.ru?search=profiler
14 апр 04, 14:34    [628497]     Ответить | Цитировать Сообщить модератору
 Re: Профилер для Access  [new]
Bor-L
Member

Откуда: Земляной вал
Сообщений: 406
http://am.rusimport.ru/MsAccess/topic.aspx?ID=279
14 апр 04, 14:44    [628532]     Ответить | Цитировать Сообщить модератору
 Re: Профилер для Access  [new]
Green2
Member

Откуда: skype: green2x2
Сообщений: 13748
Bor-L спасибо, это решает проблему. Теперь я по настоящему могу оптимизировать программу.
14 апр 04, 15:27    [628676]     Ответить | Цитировать Сообщить модератору
 Re: Профилер для Access  [new]
Green2
Member

Откуда: skype: green2x2
Сообщений: 13748
Поискавши в MSDN я обнаружил такую штуку как Visual Basic Code Profiler (VBCP) Это профилер от Microsoft.

Она поставляется с Standart Visual Basic. У меня Enterprise Visual Basic, но почему-то там я этого профилера не обнаружил. Или он поставляется до 5 версии?

Поискав еще, я нашел VBA Code Profiler, демо версию. Она работает с Word, Excel и Access. По сути программа не сильно отличается от ссылки Bor-L.

Попрошу Вас, у кого есть Visual Basic 6 посмотреть в папке tools/unsupported/vbcp.dll.
15 апр 04, 07:52    [629745]     Ответить | Цитировать Сообщить модератору
 Re: Профилер для Access  [new]
АлексейК
Member

Откуда: http://www.msdatabase.ru , Moscow
Сообщений: 7683
у меня VB6 и .net - нет такой библиотеки
15 апр 04, 09:25    [629883]     Ответить | Цитировать Сообщить модератору
 Re: Профилер для Access  [new]
Green2
Member

Откуда: skype: green2x2
Сообщений: 13748
В MSDN упоминаются профилеры других фирм.

mk:@MSITStore:C:\Program%20Files\Microsoft%20Visual%20Studio\MSDN\2000JAN\1033\period98.chm::/html/ar0698.htm

А vbcp.dll похоже, есть только у VB 5.
16 апр 04, 08:55    [632050]     Ответить | Цитировать Сообщить модератору
 Re: Профилер для Access  [new]
Green2
Member

Откуда: skype: green2x2
Сообщений: 13748
Спасибо всем, отпрофилировал

Самым прожорливым оказался код
Private Sub InsDat(number As Double, orbit As Integer, knp As Long, descr As String, grafa As Integer)

Dim qrIns As QueryDef
Set qrIns = CurrentDb.QueryDefs("InsDat")
qrIns.Parameters!Str = NumStr
qrIns.Parameters![okonhName] = okonhName
qrIns.Parameters![soatoName] = okatoName
qrIns.Parameters![type_prov] = typeProv
qrIns.Parameters![number] = number
qrIns.Parameters![orbit] = orbit
qrIns.Parameters![knp] = knp
qrIns.Parameters![god] = god
qrIns.Parameters![zn] = zn
qrIns.Parameters![descr] = descr
qrIns.Parameters![okonh] = okonh
qrIns.Parameters![okato] = okato
qrIns.Parameters![data_load] = data_load
qrIns.Parameters![account] = account
qrIns.Parameters![grafa] = grafa
qrIns.Execute
End Sub

В этой функции программа находилась 50% времени.

    Set mat = rg.Execute(i)

okonhName = okonhName & mat.Item(0).SubMatches(0)
strSql = "SELECT dbo_d_okonh.okonh FROM dbo_d_okonh WHERE (((dbo_d_okonh.OkonhName)='" & okonhName & "'));"
Set rec = CurrentDb.OpenRecordset(strSql)
If Not rec.EOF Then
okonh = rec!okonh
Else
okonh = 0
End If
А здесь она находилась 20% времени

Все обращения к базе данных очень длительны.
19 апр 04, 15:27    [636183]     Ответить | Цитировать Сообщить модератору
 Re: Профилер для Access  [new]
Green2
Member

Откуда: skype: green2x2
Сообщений: 13748
И еще, использовал профилер http://am.rusimport.ru/MsAccess/topic.aspx?ID=279
19 апр 04, 15:35    [636210]     Ответить | Цитировать Сообщить модератору
 Re: Профилер для Access  [new]
Kelme
Member

Откуда: Riga, Latvia
Сообщений: 1488
автор


Самым прожорливым оказался код
Private Sub InsDat(number As Double, orbit As Integer, knp As Long, descr As String, grafa As Integer)
Dim qrIns As QueryDef
Set qrIns = CurrentDb.QueryDefs("InsDat")
qrIns.Parameters!Str = NumStr
qrIns.Parameters![okonhName] = okonhName
qrIns.Parameters![soatoName] = okatoName
qrIns.Parameters![type_prov] = typeProv
qrIns.Parameters![number] = number
qrIns.Parameters![orbit] = orbit
qrIns.Parameters![knp] = knp
qrIns.Parameters![god] = god
qrIns.Parameters![zn] = zn
qrIns.Parameters![descr] = descr
qrIns.Parameters![okonh] = okonh
qrIns.Parameters![okato] = okato
qrIns.Parameters![data_load] = data_load
qrIns.Parameters![account] = account
qrIns.Parameters![grafa] = grafa
qrIns.Execute
End Sub




А если попробывать след. образом:
CurrentDb.Execute "INSERT INTO Table (Field1,Field2...FieldN) VALUES (" & VALUE1 & ", " & VALUE2 & ", " ... ", " & VALUEN & ")"
может побыстрее будет

ну или через Recordset
rst.AddNew
rst.Update
19 апр 04, 16:08    [636317]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить