Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Beim öffnen eine DB einen TMemoryStream "unterjubeln" (https://www.delphipraxis.net/163487-beim-oeffnen-eine-db-einen-tmemorystream-unterjubeln.html)

DelTurbo 30. Sep 2011 10:15

Datenbank: Sqlite3 • Version: sqlite-dll-win32-x86-3070701 • Zugriff über: Simple Delphi wrapper

Beim öffnen eine DB einen TMemoryStream "unterjubeln"
 
Hi,
Ich habe speed probs mit sqlite3. Nun bin dachte ich das ich ihm beim

Delphi-Quellcode:
TSQLiteDatabase.Create(FName);
irgendwie einen TMemoryStream unterschieben könnte. Geht das irgendwie?

Der .backup befehl mit ziel :memory: ist leider auch sehr sehr langsam. Danach ist zwar alles schnell, aber wenn man nur eine sache nach möchte ist es blödsinn alles über die langsame funktion zu laden.

Danke im voraus

Bernhard Geyer 30. Sep 2011 10:28

AW: Beim öffnen eine DB einen TMemoryStream "unterjubeln"
 
Wird vermutlich nicht viel bringen. Der Windows-Filecache-Algorithmus ist so gut das du nach kurzer Zeit kleine DB's mit bis zu 1 GB eh primär aus dem Speicher bedient werden (jedenfalls bei "normalen" PC mit 2/4 oder mehr GB's RAM).

DelTurbo 30. Sep 2011 10:37

AW: Beim öffnen eine DB einen TMemoryStream "unterjubeln"
 
Ne, die daten kommen vom Netzwerk. Nicht von der Lokalen platte. Dort würde es wirklich nix bringen, da hast du vollkommen recht.

Sorry das ich die info vergessen hatte.

Bernhard Geyer 30. Sep 2011 10:42

AW: Beim öffnen eine DB einen TMemoryStream "unterjubeln"
 
Zitat:

Zitat von DelTurbo (Beitrag 1127680)
Ne, die daten kommen vom Netzwerk. Nicht von der Lokalen platte. Dort würde es wirklich nix bringen, da hast du vollkommen recht.

Und? Hinter dem "Netzwerk" hängt auch eine (vermutlich Windows)-Server und dieser macht das Caching genauso optimal (oft bessser da mehr RAM verfügbar isst).
Und dort ist es oft (wenn die Latenzzeiten nicht zu hoch sind bzw. der Server zu alt bzw. ein Langsames Netz vorliegt) das die Zugriff auf die Netzdaten nicht langsamer ist als auf lokale Daten. Unsere Sourcen z.B. liegen alle auf dem Server und werden für jede Compilerung von dort geholt.


Ich hab vor 2-3 Jahren bei meinen MySQL-Tests festgestellt das diese einfach Grundsätzlich einige Performanceprobleme hat. Primär alle Zeitfresser die ich festgestellt hat waren in den sqlite-DLL's vorhanden.

DelTurbo 30. Sep 2011 10:51

AW: Beim öffnen eine DB einen TMemoryStream "unterjubeln"
 
Ich weiss auch das die sqlite3.dll der "zeitfresser" ist. Deswegen habe ich ja auch geschrieben das ein "einfaches" .backup in :memory: schon langsam ist.

Wenn ich die Daten in einen TMemoryStream lade bin ich zigmal schneller. Deswegen ja auch die frage ob ich dem das "unterjubeln" kann.

Bernhard Geyer 30. Sep 2011 10:56

AW: Beim öffnen eine DB einen TMemoryStream "unterjubeln"
 
Wenn hier eh die DLL verwendet wird müsstest du versuchen die WinAPI-Funktionen zu hooken so das ein CreteFile, ... du in deinen Memorystream umleiden kannst.

DelTurbo 30. Sep 2011 11:16

AW: Beim öffnen eine DB einen TMemoryStream "unterjubeln"
 
Tja, und da fehlt mir halt das wissen. Ich weiss nichtmal wonach ich googln sollte, bzw. hier im Board suchen sollte.

Bernhard Geyer 30. Sep 2011 11:30

AW: Beim öffnen eine DB einen TMemoryStream "unterjubeln"
 
Such mal hier im Forum nach Hook.
In der JCL gibt es die Klasse TJclPeMapImgHooks welche das Hooking ebenfalls vereinfacht.

DelTurbo 30. Sep 2011 11:39

AW: Beim öffnen eine DB einen TMemoryStream "unterjubeln"
 
Danke dir. Nun hab ich wenigsten ein schlagwort wonach ich suchen kann. Wenn einem das fehlt, nützt das beste forum (oder google) nix :?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz