Witam wszystkich!

Ostatnio miałem trochę problemy z BDE, dlatego zacząłem poważnie zastanawiać się nad jakąś alternatywą.
Wrzuciłem sobie na formatkę komponenty do InterBase/Firebirda i przystosowałem program do ich uzywania zamiast komponentów BDE, ale zauważyłem, że chodzi masakrycznie wolno. Dlatego pokusiłem się o mały test dodawania do bazy 100000 rekordów
Zawsze czytałem, że BDE jest do kitu, wolne, toporne itp, ale wyniki mnie całkowicie zaskoczyły.
Zrobiłem porównanie dwóch metod: przez Append i przypisywanie zmiennym wartości ręcznie, oraz przez INSERT w zapytaniu. Oto, co mi wyszło:

BDE Append------------------------------------0001
FireBird Append-------------------------------0020
BDE INSERT------------------------------------0003
FireBird INSERT-------------------------------0036

Co o tym myślicie?

Poniżej procedury, których użyłem:

void __fastcall TfMainForm::btnFBINSERTClick(TObject *Sender)
{
	DM->tIBMegaTest->EmptyTable();

	CTimeMsr tmTime;
	tmTime.Start();
	for(int i=0;i<100000;i++)
	{
		DM->qIBQuery->SQL->Clear();
		AnsiString sSQL = "INSERT INTO MEGATEST (VAR1, VAR2, VAR3, VAR4, VAR5, VAR6, VAR7, VAR8, VAR9, VAR10, VAR11, VAR12, VAR13, VAR14, VAR15, VAR16) \
		VALUES ('"+IntToStr(i+1)+"','Lorem','ipsum ','dolor','sit','200','100.10','15345.33','12121.09','84763943.44','123434.1234','39474.1234','994837.4456','84756.334','7746592.3434','100')";
		DM->qIBQuery->SQL->Add(sSQL);
		DM->qIBQuery->ExecSQL();
	}
	memoLog->Lines->Add("FireBird INSERT-------------------------------"+tmTime.Stop());
}
void __fastcall TfMainForm::btnBDEINSERTClick(TObject *Sender)
{

	DM->tMegaTest->DatabaseName = sDbDir;
	DM->tMegaTest->EmptyTable();
	DM->qQuery->DatabaseName = sDbDir;

	CTimeMsr tmTime;
	tmTime.Start();
	for(int i=0;i<100000;i++)
	{
		DM->qQuery->SQL->Clear();
		AnsiString sSQL = "INSERT INTO MEGATEST (VAR1, VAR2, VAR3, VAR4, VAR5, VAR6, VAR7, VAR8, VAR9, VAR10, VAR11, VAR12, VAR13, VAR14, VAR15, VAR16) \
		VALUES ('"+IntToStr(i+1)+"','Lorem','ipsum ','dolor','sit','200','100.10','15345.33','12121.09','84763943.44','123434.1234','39474.1234','994837.4456','84756.334','7746592.3434','100')";
		DM->qQuery->SQL->Add(sSQL);
		DM->qQuery->ExecSQL();
	}
	memoLog->Lines->Add("BDE INSERT------------------------------------"+tmTime.Stop());
}

void __fastcall TfMainForm::btnFBAppendClick(TObject *Sender)
{
	DM->tIBMegaTest->EmptyTable();
	DM->tIBMegaTest->Open();
	CTimeMsr tmTime;
	tmTime.Start();
	for(int i=0;i<100000;i++)
	{
		DM->tIBMegaTest->Append();
		DM->tIBMegaTestVAR1->AsString = IntToStr(i+1);
		DM->tIBMegaTestVAR2->AsString = "'Lorem'";
		DM->tIBMegaTestVAR3->AsString = "'ipsum '";
		DM->tIBMegaTestVAR4->AsString = "'dolor'";
		DM->tIBMegaTestVAR5->AsString = "'sit'";
		DM->tIBMegaTestVAR6->AsString = "200";
		DM->tIBMegaTestVAR7->AsString = "100,10";
		DM->tIBMegaTestVAR8->AsString = "15345,33";
		DM->tIBMegaTestVAR9->AsString = "12121,09";
		DM->tIBMegaTestVAR10->AsString = "84763943,44";
		DM->tIBMegaTestVAR11->AsString = "123434,1234";
		DM->tIBMegaTestVAR12->AsString = "39474,1234";
		DM->tIBMegaTestVAR13->AsString = "994837,4456";
		DM->tIBMegaTestVAR14->AsString = "84756,334";
		DM->tIBMegaTestVAR15->AsString = "7746592,3434";
		DM->tIBMegaTestVAR16->AsString = "100";
		DM->tIBMegaTest->Post();
	}
	memoLog->Lines->Add("FireBird Append-------------------------------"+tmTime.Stop());
	DM->tIBMegaTest->Close();
}

void __fastcall TfMainForm::btnBDEAppendClick(TObject *Sender)
{
	DM->tMegaTest->EmptyTable();
	DM->tMegaTest->Open();
	CTimeMsr tmTime;
	tmTime.Start();
	for(int i=0;i<100000;i++)
	{
		DM->tMegaTest->Append();
		DM->tMegaTestVAR1->AsString = IntToStr(i+1);
		DM->tMegaTestVAR2->AsString = "'Lorem'";
		DM->tMegaTestVAR3->AsString = "'ipsum '";
		DM->tMegaTestVAR4->AsString = "'dolor'";
		DM->tMegaTestVAR5->AsString = "'sit'";
		DM->tMegaTestVAR6->AsString = "200";
		DM->tMegaTestVAR7->AsString = "100,10";
		DM->tMegaTestVAR8->AsString = "15345,33";
		DM->tMegaTestVAR9->AsString = "12121,09";
		DM->tMegaTestVAR10->AsString = "84763943,44";
		DM->tMegaTestVAR11->AsString = "123434,1234";
		DM->tMegaTestVAR12->AsString = "39474,1234";
		DM->tMegaTestVAR13->AsString = "994837,4456";
		DM->tMegaTestVAR14->AsString = "84756,334";
		DM->tMegaTestVAR15->AsString = "7746592,3434";
		DM->tMegaTestVAR16->AsString = "100";
		DM->tMegaTest->Post();
	}
	memoLog->Lines->Add("BDE Append------------------------------------"+tmTime.Stop());
	DM->tMegaTest->Close();
}

Pozdrawiam
kappa