Frage

Ich habe eine Win-CGI-Anwendung, die ich zur Zeit auf ISAPI bin umgewandelt wird.

Die Anwendung verwendet die TDataset Nachkommen für Extended Systems Advantage Database Server.

Da es nur eine Instanz eines TAdsSettings Objekt sein kann, muss dieser sein im Hauptthread.

TAdsQuery Objekte werden in den Anforderungs-Threads benötigt wird.

Wird diese Arbeit - das heißt, die AdsQueries in den Anforderungs-Threads wählen Sie die globalen Einstellungen aus dem AdsSettings up-Objekt in der Haupt fädeln, und wird diese Threadsicherheit?

War es hilfreich?

Lösung

Ja, es wird funktionieren. Die TAdsSettings Komponente ändert Einstellungen im Advantage-Client-Engine (ACE) und mit ISAPI wird es eine Instanz von ACE wird geladen, dass alle Threads verwenden.

Ich würde es nicht empfehlen, aber. In Abhängigkeit von den Einstellungen ändern Sie würde es mehr Sinn machen, nur direkt auf die ACE-APIs aufrufen. wenn Sie werden beispielsweise das Datumsformat einstellen, ist es sinnvoller, die TAdsSettings Komponente zu eliminieren und rufen Sie einfach AdsSetDateFormat60, die eine Verbindung Griff nimmt. Erste der TAdsSettings Komponente loszuwerden eliminiert viele Anrufe ACE globale Einstellungen festlegen. Viele dieser Anrufe haben ein Sync-Objekt haben, alle Verbindungen ab zu halten, während die globalen geändert wird. Das wird eine negative Auswirkung auf die Leistung, vor allem in einer Multi-Threaded-Anwendung wie eine Web-Anwendung. machen Stattdessen Anrufe, die auf der angegebenen Verbindung Griff betätigen.

Sie können die Verbindung Griff bekommen, indem die TAdsConnection.Handle Eigenschaft verweisen oder die TAdsQuery.GetAceConnectionHandle Methode aufrufen.

Andere Tipps

Sicherstellen, dass die AdsQueries Synchronisieren verwenden, um die TAdsSettings Zugriff direkt (oder ein Messaging-System verwenden, um zwischen Arbeitsthreads und Haupt-Thread comunicate anstatt direkt zugreifen), wenn sie nicht in dem Haupt-Thread (d.h. System.MainThreadID <> Windows.GetCurrentThreadID)

Ich hatte auch diese Frage in der Newsgroup gefragt: devzone.advantagedatabase.com, Advantage.Delphi

Aus Gründen der Vollständigkeit, ich will hinzufügen, weitere Frage / Antwort vom Rest des Threads:

  

Frage (Me):

     

Viele der Anfragen in Threads zur Zeit nicht an einen angebracht   TAdsConnection Objekt. Ich plane eine Verbindung für jeden zu schaffen   Gewinde für diese „verwaisten“ Abfragen zu verwenden, aber es ist eine große Anwendung   und dies wird einige Zeit dauern. Ich bin auch ziemlich sicher, dass die einzige nicht-default   Eigenschaft im TAdsSettings Objekt ist die Server-Typen festgelegt, die   auch in der Verbindungskomponente eingestellt werden, so dass, wenn alle Abfragen sind   in Verbindung mit Verbindungen, würde nicht die Einstellungen Komponente benötigt werden. Ich werde schauen   in den Einstellungen API direkt als Alternative aufrufen.

     

In der Zwischenzeit habe ich eine Frage zu Threading und die Abfragen   ohne Verbindungskomponente zugeordnet. Ich bemerkte aus den Hilfedateien   Wenn Abfragen in mehreren Threads teilen ihnen ein einziges Verbindungsobjekt, das   Abfragen werden nicht gleichzeitig in Serie betrieben werden. Mit einem   Verbindungsobjekt in jedem Thread, sollte dies kein Problem sein, aber ich bin   fragen über die Abfragen, die nicht haben ein Verbindungsobjekt   zugeordnet. Werden sie auf unabhängige Verbindungen betrachtet werden, aus   die Sicht Gleichzeitigkeit von Multithreading, oder werden sie   betrachtet auf derselben Verbindung zu sein und so zu jedem ergeben haben,   andere?

     

Antwort (Jeremy):

     

Sie müssen diese Adresse. Sie werden nur eine globale Liste der Verbindungen suchen   eine mit dem gleichen Pfad zu finden, und sie werden diese Verbindung verwenden. Nicht gut   in einer Multi-Thread-Anwendung.

So von Jeremy Antwort ist es am besten für jeden Thread mindestens ein TAdsConnection Objekt erstellen und sicherstellen, dass alle Anfragen an sie gebunden sind, sonst Serialisierung auftreten kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top