Announcement

Collapse
No announcement yet.

CallbackServer: Callbackaufrufe extrem langsam

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • CallbackServer: Callbackaufrufe extrem langsam

    /Moin,

    kaum habe ich das eine PRoblem gelöst, kommt das nächste...

    Habe mir anhand des Beispiel Kapitel 8 - DBSrv aus dem Buch COM/DCOM/COM+ einen CallbackServer geschrieben.
    Der funktioniert auch soweit, aber die Callbacks sind sehr sehr langsam. Ich auf den Callback für einen Client 15-20 Sekunden.

    Da mir jedoch bei dem Aufruf folgender Funktion:
    Code:
    function TDBUsers.AddUser(const CB: IDBEvent; var User: Integer): Boolean;
    var
      aUser : TDBUser;
    begin
      Inc(FLastUserId);
      // numerische Benutzerkennung zurückliefern
      User := FLastUserId;
      // Benutzerobjekt anlegen
      aUser := TDBUser.Create;
      with aUser do begin
        UserId := FLastUserId;
        Callback := CB;
      end;
      // Benutzerobjekt in die Benutzerliste aufnehmen
      FUserList.Add(aUser);
      Result:= TRUE;
    end;
    Immer der Fehler unterkam, dass das Interface für eine andere Anwendung marshalled sei, habe ich diese wie folgt geändert:
    Code:
    function TPrograms.AddProg(const ACallbackList : ICallbackEvent; var AProgname
      : Widestring) : Boolean;
    var
      aProg                         : TProgram;
      aCB                           : ICallbackEvent;
    begin
      if FindProg(AProgname) = -1 then
      begin
      // Programmobjekt anlegen
        aProg := TProgram.Create;
        OleCheck(CoMarshalInterThreadInterfaceInStream(IID_ICallbackEvent, ACallbackList, IStream(aProg.CP)));
        OleCheck(CoGetInterfaceAndReleaseStream(IStream(AProg.CP), IID_ICallbackEvent, aProg.Callback));
        aProg.ProgName := AProgname;
        FProgList.Add(aProg);
        Result := True;
      end
      else
        Result := False;
    end;
    Ich denke jedoch, dass ich da durch diese extremen Performance Probleme erhalte, jedoch nicht weiss, wie ich das lösen kann.

    Vielleicht kennt einer dieses Problem ja.

    Greetz Dennis
Working...
X