Истина ли е или греша...
12 отговора
566 прегледа
Истина ли е или греша...
Добавям редове към база данни Аccess. Програмата е на MSVC++6.0, използвам Recordset(ODBC ). Време за добавяне на 100 записа 12 секунди.
Mашината не е много стара -CPU P3/800MHz 256К RАМ т.н.
Програмата ли е написана лошо или това е реалноста?
Mашината не е много стара -CPU P3/800MHz 256К RАМ т.н.
Програмата ли е написана лошо или това е реалноста?
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 :)
chudia se bezina li e losh ili towa e realnostta...
edinstwenoto sigurno neshto e che moje i po byrzo da se dwiji :)
Re: Истина ли е или греша...
da ne si prekalil s indexite? ili tablicata w koiato dobawiash da e mnogo goliama...
Така че...
... да посъветваме човека да даде колата да я пробваме на нашите полигони? 
Редактирано от MиГ на
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;
}
Надявам се да помогнете да поправим колата.

за 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;
}
Надявам се да помогнете да поправим колата.
ВИНДОВС (21век)...
kakvo oste iskate!?
predpolagam ce vaprosnata operacia na 1MHz 8bitov procesor trebva da stane za 50ms
predpolagam ce vaprosnata operacia na 1MHz 8bitov procesor trebva da stane za 50ms
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 :)
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 :)
Re: Истина ли е или греша...
Открих къде ти е проблема! Въпреки че процесора ти е бърз имаш твърде малко памет - 256K ;)
Go on, prove me wrong. Destroy the fabric of the universe. See if I care.
Go on, prove me wrong. Destroy the fabric of the universe. See if I care.
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 .... ;)))))
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 на
Re: Истина ли е или греша...
Da ne vkarvash BLOB-we, nai dobre postni coda, za da vidim.
Re: Истина ли е или греша...
ce 256K malko li e be!
tova se sabira v registrite na procesora samo! (kato izklicim samata boza danni de) :-))))
tova se sabira v registrite na procesora samo! (kato izklicim samata boza danni de) :-))))
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 :)
wsyshnost neznam... moje i da byrkam, da e 256k... samo se zaiajdam :)
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;
}
работи с 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;
}