PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Große Datei effektiv nutzen C#



knight14th
25.06.2004, 15:08:40
Hallo,

ich bin gerade dabei mir einen Deutsch-Englisch übersetzer zu programmieren. Dabei soll eine ca. 4,5MB große Textdatei durchsucht werden, welche die Wörter in beiden Sprachen enthält.
Nun ist mir aufgefallen, dass das Durchsuchen dieser mittels StreamReader realtiv langsam ist. Wie kann man so eine große Datei effektiv nutzen?

C#

Grüße,

knight14th

DeJe
25.06.2004, 17:14:46
Indem Du von C# auf C++ wechselst und hier "memory mapped files" benutzt.

Hm, das wird Dir wahrscheinlich nicht allzu viel helfen. Vielleicht kannst Du aber DLL' einbinden die diese Dateigeschichte in C++ implementieren und Dir in C# zur Verfügung stellen.

nSonic
25.06.2004, 17:47:11
Das schnelle Umgehen mit solchen Daten ist die hohe Kunst auf dem PocketPC. Du brauchst eine Art kleine Datenbank.

Früher (und heute noch ;) Tron kann das bestätigen) hat man das mit kleinen Index-Dateien gelöst:
- Du hat eine Textdatei mit Deinen Datensätzen. Möglichst sortiert.
- Du hast eine kleine Indexdatei in der steht, ab wo in der großen Datei z.B. die Begriffe mit "B" beginnen
- Evtl. machst Du das zweistufig: Erste Indexdatei verzweigt auf eine zweite Indexdatei (z.B. wo stehen die Begriffe mit "B"). Die zweite Indexdatei hat dann mehr zeichen und verzweigt auf die endgültige Datei
So braucht man nur relativ wenig lesen

Wenn Der Index sortiert ist dann kannst Du mit QuickSearch-Algorithmen recht schnell die Einträge finden.
Arbeitest Du mit so einem ersten Einstieg-Index (Nur ein Anfangsbuchstabe - also max. 26 Einträge) dann kannst Du die immer im Speicher halten

nSonic

knight14th
26.06.2004, 10:24:50
Ersteinmal vielen Dank für die Antworten.
Die Liste ist sortiert, allerdings will ich auch nach Redewendungen suchen und diese ausgeben. Hierbei steht das Wort aber ich immer zwangsläufig am Anfang. Aus diesem Grund muß ich leider die ganze Datei durchsuchen.

nSonic
26.06.2004, 11:10:47
...oder einen Volltextindex anlegen... der wird dann aber etwas größer werden - sich dafür aber schnell durchsuchen lassen