Истина ли е или греша...

12 отговора 566 прегледа
#1

Истина ли е или греша...

Добавям редове към база данни Аccess. Програмата е на MSVC++6.0, използвам Recordset(ODBC ). Време за добавяне на 100 записа 12 секунди.
Mашината не е много стара -CPU P3/800MHz 256К RАМ т.н.
Програмата ли е написана лошо или това е реалноста?

Отговор
в отговор на FDB #2

Re: Истина ли е или греша...

imam edna kola, nalial sym i VPower obache tia kara s 40 km...
chudia se bezina li e losh ili towa e realnostta...

edinstwenoto sigurno neshto e che moje i po byrzo da se dwiji :)

Отговор
в отговор на FDB #3

Re: Истина ли е или греша...

da ne si prekalil s indexite? ili tablicata w koiato dobawiash da e mnogo goliama...

Отговор
в отговор на emo #4

Така че...

... да посъветваме човека да даде колата да я пробваме на нашите полигони?

Редактирано от MиГ на

Отговор
в отговор на emo #5

Re: Истина ли е или греша...

С този код, при един индекс и 500 записа в базата, добавянето става
за 15сек!

int CAppView::OnAddRecords()
{
int i ;
for(i=0;i<100;i++)
{
AddRec();
}
return 0;
}

int CAppView::AddRec()
{
Fl_addrec=1;
m_pSet->MoveLast();
// Get the ID for the new record
long m_NewNN =(long) m_pSet->m_NN + 1;

// Add the new record
m_pSet->AddNew();

// Set the ID in the new record
m_pSet->m_NN = m_NewNN; //
// Save the new record
if (m_pSet->CanUpdate() )
m_pSet->Update();
else
{ MessageBox ( TEXT("Unable to update new record !"),
TEXT("Error"), MB_OK);
//return 1;
}
// Refresh the record set
m_pSet->Requery();
// Move to the new record
m_pSet->MoveLast();

//MaxRowv=m_NewNN;

//Fl_addrec=0;
return 0;
}

Надявам се да помогнете да поправим колата.


Отговор
в отговор на FDB #6

ВИНДОВС (21век)...

kakvo oste iskate!?
predpolagam ce vaprosnata operacia na 1MHz 8bitov procesor trebva da stane za 50ms

Отговор
в отговор на FDB #7

Re: Истина ли е или греша...

eee..
ako e wyzmojno da go slojish tozi nomer AutoNumber i da razkarash wsichkite
tezi MoveXXXX(), Requery etc. :)
ti ne prosto dobawaish zapisi :)

ako ne moje da slojish autonumber (primerno ako prawish replikacia
mejdu DB na dwa komputyra koito sa offline)
nai-prostia wariant e ako e single user da si pazish edin nomer
i da si go uwelichawash sam, ne da chetesh wseki pyt nomera ot tablicata...
ako e multi user.... moje da si naprawish edna tablica s poslednite
nomera i da ia zakluchwash w nachaloto na cikyla i da si uwelichawash
nomera sam, a w kraia na cikyla da go zapiswash obratno...

razni takiwa raboti :)
ako ima niakoi spec po access da se obadi s po inteligentno predlojenie :)

Отговор
в отговор на FDB #8

Re: Истина ли е или греша...

Открих къде ти е проблема! Въпреки че процесора ти е бърз имаш твърде малко памет - 256K ;)

Go on, prove me wrong. Destroy the fabric of the universe. See if I care.
Отговор
в отговор на FDB #9

Re: Истина ли е или греша...

tablicata e elementarna, ID autonumber primary key, data text, pri tvoito polojenie - 500 records i vkarvane na oste 100 - grubo 1 sec. :)

void CSpeedtestDlg::OnAddnew()
{
if (!m_pdbTest)
m_pdbTest = new CDBTest;
char pszStartTime[128], pszEndTime[128];
try
{
if (!m_pdbTest->IsOpen())
m_pdbTest->Open();
if (!m_pdbTest->CanAppend())
{
AfxMessageBox ("CanAppend == FASLE!");
return;
}
_tzset();
_strtime (pszStartTime);
for (int i=0; i<100; i++)
{
AddRecord();
}
_strtime (pszEndTime);
m_ctlStartTime.SetWindowText (pszStartTime);
m_ctlEndTime.SetWindowText (pszEndTime);
m_pdbTest->Close();
delete m_pdbTest;
m_pdbTest=NULL;
}
catch (CDBException *e)
{
e->ReportError();
e->Delete();
}
}

BOOL CSpeedtestDlg::AddRecord()
{
char tmpbuff[128];
try
{
m_pdbTest->AddNew();
_strtime (tmpbuff);
m_pdbTest->m_strText = tmpbuff;
m_pdbTest->Update();
}
catch (CDBException *e)
{
e->ReportError();
e->Delete();
return FALSE;
}
return TRUE;
}


p.s. Ne pretendiram za perfekten kod .... ;)))))

Редактирано от Goose на

Отговор
в отговор на FDB #10

Re: Истина ли е или греша...

Da ne vkarvash BLOB-we, nai dobre postni coda, za da vidim.

Отговор
в отговор на Rincewind #11

Re: Истина ли е или греша...

ce 256K malko li e be!
tova se sabira v registrite na procesora samo! (kato izklicim samata boza danni de) :-))))

Отговор
в отговор на CALL-151 #12

Re: Истина ли е или греша...

basi kakyw procesor imash... moia tbird mai ima 64k L1 i 128 L2
wsyshnost neznam... moje i da byrkam, da e 256k... samo se zaiajdam :)

Отговор
в отговор на Goose #13

Re: Истина ли е или греша...

Kокто съм написал излиза, че Win2000 e супер ОС, която може да
работи с 256К RАМ.

Промених програмата и вече 1000 реда се добавят за 8 сек.
Поставям Requery() извън цикъла(след добавянето на редовете).

int CAppView::OnAddRecords()
{
.
.
AddRec(1000);
.
return 0;
}


int CAppView::AddRec( int nr)
{
int i;
Fl_addrec=1;

m_pSet->MoveLast();
// Get the ID for the new record
long m_NewNN =(long) m_pSet->m_NNU + 1;

for(i=0;i<nr;i++)
{// Add the new record
m_pSet->AddNew();

// Set the ID in the new record
m_pSet->m_NN = m_NewNN; //
// Save the new record
if (m_pSet->CanUpdate() )
m_pSet->Update();
else
{MessageBox ( TEXT("Unable to update new record !"),
TEXT("Error"), MB_OK);
// return;
}
m_NewNN++;
}
// Refresh the record set
m_pSet->Requery();
// Move to the new record
m_pSet->MoveLast();

// MaxRowv=m_NewNN;

// Fl_addrec=0;
return 0;
}

Отговор