Discussion:
Fill mit OleDbDataAdapter unglaublich langsam?
(zu alt für eine Antwort)
Alexander Kölling
2004-06-21 07:25:08 UTC
Permalink
Hi *!

Ich habe ein Problem den IXS mit C# abzufragen.
Ich bereite alles vor...
Cisso.CissoQueryClass cqc = new Cisso.CissoQueryClass();
DataSet ds = new DataSet();
OleDbDataAdapter daConvertToDataset = new OleDbDataAdapter();

mache alle parameter für die abfrage klar...

cqc.Catalog = CiCatalog;
cqc.Dialect = "2";
cqc.CiScope = System.String.Join(",",CiScope);
cqc.CiFlags = CiFlags;
cqc.Query = "" + strQuery + strFileMask;
cqc.Columns =
"vpath,DocTitle,Characterization,Rank,Filename,Contents,size,Directory";

Mache die Abfrage selbst....

ADODB.Recordset rsIX = (ADODB.Recordset)cqc.CreateRecordset("sequential")

...die auch in weniger als 1ner Sekunde da ist! Aber das übertragen mit dem
Ole-Adapter in ein .net DataSet dauert geschlagene 80SEKUNDEN bei
Ergebnissmengen um die 2500 Datensätze! ...und jetzt bitte keine Bemerkungen
über mangelnden Arbeitsspeicher und Prozessorpower *schmunzel*!

daConvertToDataset.Fill(ds,rsIX, "IXResults"); //->Das ist der Bösewicht! Wo
ist das Problem?

Hat jemand eine Idee, wo ich was falsch gemacht haben könnte oder einen
Workaround oder ähnliches?!!?

Danke& Gruß,

der alex
Volker Biedermann
2004-06-21 09:23:25 UTC
Permalink
Hallo Alexander,
Post by Alexander Kölling
Ich habe ein Problem den IXS mit C# abzufragen.
Ich bereite alles vor...
Cisso.CissoQueryClass cqc = new Cisso.CissoQueryClass();
DataSet ds = new DataSet();
OleDbDataAdapter daConvertToDataset = new OleDbDataAdapter();
mache alle parameter für die abfrage klar...
cqc.Catalog = CiCatalog;
cqc.Dialect = "2";
cqc.CiScope = System.String.Join(",",CiScope);
cqc.CiFlags = CiFlags;
cqc.Query = "" + strQuery + strFileMask;
cqc.Columns =
"vpath,DocTitle,Characterization,Rank,Filename,Contents,size,Directory";
Mache die Abfrage selbst....
ADODB.Recordset rsIX = (ADODB.Recordset)cqc.CreateRecordset("sequential")
...die auch in weniger als 1ner Sekunde da ist! Aber das übertragen mit dem
Ole-Adapter in ein .net DataSet dauert geschlagene 80SEKUNDEN bei
Ergebnissmengen um die 2500 Datensätze! ...und jetzt bitte keine Bemerkungen
über mangelnden Arbeitsspeicher und Prozessorpower *schmunzel*!
daConvertToDataset.Fill(ds,rsIX, "IXResults"); //->Das ist der Bösewicht! Wo
ist das Problem?
Hat jemand eine Idee, wo ich was falsch gemacht haben könnte oder einen
Workaround oder ähnliches?!!?
Wenn du anstelle von ADO, ADO.NET benutzt (was auch unter .NET empfohlen
ist) sollte es "ausreichend" schnell sein.

Gruß
Volker
Alexander Kölling
2004-06-22 08:39:49 UTC
Permalink
Hi Volker,

aber wie komm ich denn mit ADO.NET an den Inderx Server ran?
Ich habe eine andere Möglichkeit im Netz gefunden, die über OleDB den Index
Server abgreifen kann:
System.Data.OleDb.OleDbConnection odbSearch = new
System.Data.OleDb.OleDbConnection();

System.Data.OleDb.OleDbCommand cmdSearch = new
System.Data.OleDb.OleDbCommand();

odbSearch.ConnectionString = "Provider=\"MSIDXS\";Data
Source=\"Archivname\";";

cmdSearch.Connection = odbSearch;

OleDbDataReader rdrSearch = cmdSearch.ExecuteReader();

while( rdrSearch.Read()) {

[...]

...das bringt mir aber nichts, weil ich ein DataSet oder eine DataTable als
Rückgabewert habe und die Daten noch weiterverarbeite...!?!

Wenn ich an dieser stelle wieder einen OleDbDataAdapter benutze ist es
immerhin nur noch 72sek lang :-)

Wenn ich die Zuweisung über einen DataReader in ein selbstgebautes DataSet
mache 68sek und wenn ich die speicherintensiven Felder, wie
"Characterization" weglasse und mir nur den Dateinamen zurückgeben lasse,
unglaubliche 30sek...?!!?

Das ist aber alles nicht wirklich das gelbe vom Ei ... vielleicht kann ich
an der Query noch was ändern oder am Katalog selbst? Aber wie gesagt der
Index Server selbst liefert das Ergebnis schnell ... das "umschreiben"
dauert so lange...?!

Leider kommt für mich auch kein Paging in Frage, da ich alle resultate auf
einmal brauche:-(



.

.

.

???



gruß,

der alex
Post by Volker Biedermann
Hallo Alexander,
Post by Alexander Kölling
Ich habe ein Problem den IXS mit C# abzufragen.
Ich bereite alles vor...
Cisso.CissoQueryClass cqc = new Cisso.CissoQueryClass();
DataSet ds = new DataSet();
OleDbDataAdapter daConvertToDataset = new OleDbDataAdapter();
mache alle parameter für die abfrage klar...
cqc.Catalog = CiCatalog;
cqc.Dialect = "2";
cqc.CiScope = System.String.Join(",",CiScope);
cqc.CiFlags = CiFlags;
cqc.Query = "" + strQuery + strFileMask;
cqc.Columns =
"vpath,DocTitle,Characterization,Rank,Filename,Contents,size,Directory";
Mache die Abfrage selbst....
ADODB.Recordset rsIX =
(ADODB.Recordset)cqc.CreateRecordset("sequential")
Post by Volker Biedermann
Post by Alexander Kölling
...die auch in weniger als 1ner Sekunde da ist! Aber das übertragen mit
dem
Post by Alexander Kölling
Ole-Adapter in ein .net DataSet dauert geschlagene 80SEKUNDEN bei
Ergebnissmengen um die 2500 Datensätze! ...und jetzt bitte keine
Bemerkungen
Post by Alexander Kölling
über mangelnden Arbeitsspeicher und Prozessorpower *schmunzel*!
daConvertToDataset.Fill(ds,rsIX, "IXResults"); //->Das ist der
Bösewicht!
Post by Volker Biedermann
Wo
Post by Alexander Kölling
ist das Problem?
Hat jemand eine Idee, wo ich was falsch gemacht haben könnte oder einen
Workaround oder ähnliches?!!?
Wenn du anstelle von ADO, ADO.NET benutzt (was auch unter .NET empfohlen
ist) sollte es "ausreichend" schnell sein.
Gruß
Volker
Volker Biedermann
2004-06-22 09:26:53 UTC
Permalink
Hallo Alexander,

"Alexander Kölling" <***@gmx.de> schrieb: > [...]

[schnipp]
Post by Alexander Kölling
...das bringt mir aber nichts, weil ich ein DataSet oder eine DataTable als
Rückgabewert habe und die Daten noch weiterverarbeite...!?!
Wenn ich an dieser stelle wieder einen OleDbDataAdapter benutze ist es
immerhin nur noch 72sek lang :-)
Wenn ich die Zuweisung über einen DataReader in ein selbstgebautes DataSet
mache 68sek und wenn ich die speicherintensiven Felder, wie
"Characterization" weglasse und mir nur den Dateinamen zurückgeben lasse,
unglaubliche 30sek...?!!?
Das ist aber alles nicht wirklich das gelbe vom Ei ... vielleicht kann ich
an der Query noch was ändern oder am Katalog selbst? Aber wie gesagt der
Index Server selbst liefert das Ergebnis schnell ... das "umschreiben"
dauert so lange...?!
Leider kommt für mich auch kein Paging in Frage, da ich alle resultate auf
einmal brauche:-(
[schnapp]

Ohne jetzt hier in die Tiefe zu gehen, aber irgendwie liest sich dass, das
du ein "suboptimalen" Treiber nutzt. Evtl. schon mal nach einen Hersteller
umgeschaut der hier etwas mehr Perfomance bietet?

Gruß
Volker
Alexander Kölling
2004-06-29 12:36:21 UTC
Permalink
Hi Volker!

Erstmal danke für Deine Antworten!
Ich hab vieles weggeschmissen und eine etwas andere Abfrage Technik benutzt!

System.Data.OleDb.OleDbConnection odbSearch = new
System.Data.OleDb.OleDbConnection();
System.Data.OleDb.OleDbCommand cmdSearch = new
System.Data.OleDb.OleDbCommand();
odbSearch.ConnectionString = "Provider=\"MSIDXS\";Data
Source=\"TF_Archiv\";";
cmdSearch.Connection = odbSearch;

Man fragt den Index Server von Microsoft dann mit einem SQL Statment ab. Aus
irgend einem Grund geht das in meiner Konfiguration schneller. Mag es daran
liegen, dass die übermittelte Abfrage "inteligenter" interpretiert wird
...?...ich weiß es nicht.
Da auch der Index Server von Microsoft ist, bleibt mir wohl nichts anderes
als Ado 2.7 zu benutzen ... nach dem ganzen hin und her und weiteren
einschränkungen in der Abfrag bin ich von besagten 80sek auf 4 runter ...
das MUSS wohl erstmal reichen...?!!?
Davon abgesehen ist der Index Server ne nette möglichkeit unterschiedlichste
Dokumente mit einer Volltextsuche auszustatten ... echt.

However! Danke für die Tipps und Anregungen!
Post by Volker Biedermann
Hallo Alexander,
[schnipp]
Post by Alexander Kölling
...das bringt mir aber nichts, weil ich ein DataSet oder eine DataTable
als
Post by Alexander Kölling
Rückgabewert habe und die Daten noch weiterverarbeite...!?!
Wenn ich an dieser stelle wieder einen OleDbDataAdapter benutze ist es
immerhin nur noch 72sek lang :-)
Wenn ich die Zuweisung über einen DataReader in ein selbstgebautes DataSet
mache 68sek und wenn ich die speicherintensiven Felder, wie
"Characterization" weglasse und mir nur den Dateinamen zurückgeben lasse,
unglaubliche 30sek...?!!?
Das ist aber alles nicht wirklich das gelbe vom Ei ... vielleicht kann ich
an der Query noch was ändern oder am Katalog selbst? Aber wie gesagt der
Index Server selbst liefert das Ergebnis schnell ... das "umschreiben"
dauert so lange...?!
Leider kommt für mich auch kein Paging in Frage, da ich alle resultate auf
einmal brauche:-(
[schnapp]
Ohne jetzt hier in die Tiefe zu gehen, aber irgendwie liest sich dass, das
du ein "suboptimalen" Treiber nutzt. Evtl. schon mal nach einen Hersteller
umgeschaut der hier etwas mehr Perfomance bietet?
Gruß
Volker
Loading...