![]() |
Datenbank: SQL-Server • Version: ab 2012 • Zugriff über: -
SQL-Server auflisten dauert lange
Hallo Delphi-Gemeinde,
ich möchte mich heute mit einem (hoffentlich) kleinen Problem an euch wenden. Leider habe ich bisher keine Lösung oder Erklärung für mein Problem gefunden. Ich habe folgende Routine in mein Programm eingebaut.
Delphi-Quellcode:
Hat bisher auch super auf mehreren Rechnern funktioniert. Vor einiger Zeit startete das Programm auf einem Rechner sehr langsam. Auf allen anderen Rechnern startete das Programm wie gewohnt. Bisher jedenfalls. Mittlerweile ist der Programmstart auf allen Rechnern langsam.
procedure TfrmMain.ListAvailableSQLServers(Names: TStringList);
{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - } function PtCreateADOObject(const ClassID: TGUID): IUnknown; var Status: HResult; FPUControlWord: Word; begin asm FNSTCW FPUControlWord end; Status := CoCreateInstance( CLASS_Recordset, nil, CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, IUnknown, Result); asm FNCLEX FLDCW FPUControlWord end; OleCheck(Status); end; {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - } var RSCon: ADORecordsetConstruction; Rowset: IRowset; SourcesRowset: ISourcesRowset; SourcesRecordset: _Recordset; SourcesName, SourcesType: TField; begin SourcesRecordset := PtCreateADOObject(CLASS_Recordset) as _Recordset; RSCon := SourcesRecordset as ADORecordsetConstruction; SourcesRowset := CreateComObject(ProgIDToClassID('SQLOLEDB Enumerator')) as ISourcesRowset; OleCheck(SourcesRowset.GetSourcesRowset(nil, IRowset, 0, nil, IUnknown(Rowset))); RSCon.Rowset := RowSet; with TADODataSet.Create(nil) do try Recordset := SourcesRecordset; SourcesName := FieldByName('SOURCES_NAME'); SourcesType := FieldByName('SOURCES_TYPE'); Names.BeginUpdate; Names.Clear; try while not EOF do begin if (SourcesType.AsInteger = DBSOURCETYPE_DATASOURCE) and (SourcesName.AsString <> '') then Names.Add(SourcesName.AsString); Next; end; finally Names.EndUpdate; end; finally Free; end; end; Der Grund für den langsamen Start ist wohl die folgende Programmzeile. OleCheck(SourcesRowset.GetSourcesRowset(nil, IRowset, 0, nil, IUnknown(Rowset))); Die Ausführung dieses Befehls dauert 45 sekunden. Vorher wurde das kpl. Programm in ca. 5-10 sekunden gestartet. An den einzelnen Rechnern wurde eigentlich nichts verändert. Normale Win 10 Pro Rechner, mit unterschiedlichen Virenprogrammen (MS und Norton) und unterschiedlichen Office-Paketen (2010 bis Office 365). Lediglich die Windowsupdates wurden installiert. Nun meine Frage, hat jemand eine Idee wo das Problem liegen könnte? Vorab schon mal vielen Dank. |
AW: SQL-Server auflisten dauert lange
Entweder Windows-Update das MS hier in dem Bereich etwas Korrigiert hat
Netzwerk-Timesouts die aktuell zuschlagen Virenscanner die etwas "übermotiviert" in dem Bereich arbeiten. |
AW: SQL-Server auflisten dauert lange
Hallo Bernhard,
vielen Dank für die Rückmeldung. Die Windowsupdates hatte ich auch schon in Verdacht. Die zwei anderen Tips würde ich mal ausschließen. Auf den getesteten Rechnern laufen unterschiedliche Virenprogramme. Bei meinem lokalen Rechner mit installierten SQL-Express habe ich den Virensanner testweise deaktiviert. Leider ohne eine Verbesserung festzustellen. Wegen der Updates muss ich mir mal Gedanken machen, wäre aber dankbar für weitere Anregungen. |
AW: SQL-Server auflisten dauert lange
Eine Alternative wäre was anderes als ADO zu benutzen und zu hoffen dass es schneller ist. :duck:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz