Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

riCo

Treue Seele

  • »riCo« ist der Autor dieses Themas

Beiträge: 165

Beruf: Student

  • Private Nachricht senden

1

16.05.2008, 12:25

Datei einlesen zu langsam

Hallo,
ich entwickle eine Software für ein Windows CE .NET (4.2) Gerät und muss Daten von einem USB-Stick lesen. Die Funktion kann ich nicht weiter optimieren. Das beste Ergebnis erziele ich, wenn ich 512 kByte-Buffer lese.

Das Problem ist das Lesen der Datei vom Stick.

Stark vereinfacht sieht mein Quellcode so aus(erhebe keinen Anspruch auf Korrektheit, ist schnell live programmiert):

C-/C++-Quelltext

1
2
3
4
5
6
7
8
CFile file;
file.Open("\\UsbDrive\\Datei.irgendwas", CFile::modeRead|CFile::typeBinary);

while(!file.IsEOF())
{
     file.Read(byteBuffer, 512*1024);           // das ist das Problem!

}
file.Close();


Muss ich die Datei vielleicht anders öffnen? Ähnlich wie den seriellen Port? Auf diese Weise geht das öffnen der Datei doch am USB-Treiber vorbei, oder? Zum Vergleich --> von SD-Karte dauert es 200ms, vom USB-Stick 4600ms.
Wir leben alle unter dem Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

2

16.05.2008, 13:56

Nur mal kurz: du meinst hoffentlich 4600ms? Ansonsten würd ich sagen, Respekt für soviel Geduld :D

riCo

Treue Seele

  • »riCo« ist der Autor dieses Themas

Beiträge: 165

Beruf: Student

  • Private Nachricht senden

3

16.05.2008, 14:04

Habe es korrigiert, leider löst es das Problem noch nicht.. ;-)
Wir leben alle unter dem Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

4

16.05.2008, 14:58

wie groß ist denn die datei? denn soweit ich weiß hat usb ja auch beschränkugnen was die übertragungsrate angeht...vielleicht ist die ce ja auch noch mal niedriger...

riCo

Treue Seele

  • »riCo« ist der Autor dieses Themas

Beiträge: 165

Beruf: Student

  • Private Nachricht senden

5

16.05.2008, 15:08

Die Datei ist 32MB, allerdings lese ich nur 700*4000 Byte (~2,7MB).

Die Frage ob der USB bei Windows CE langsamer ist, kannst du dir daher selber beantworten. Die Frage ist doch:
1. Gibt es Möglichkeit die Datei auf dem Stick ähnlich wie einen COM-Port zu öffnen und so eine Treiberunterstützung zu bekommen?
2. Würde es etwas bringen das auf Assembler runterzubrechen, oder bringt das ehr nichts?
3. Verbessert sich die Performance wenn ich selbst einen Treiber schreibe, der dann im Kernelmode arbeitet?
Wir leben alle unter dem Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.

6

16.05.2008, 20:33

Kommt immer darauf an ... ehm im Beispiel ließt du aber die ganze Datei ...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

riCo

Treue Seele

  • »riCo« ist der Autor dieses Themas

Beiträge: 165

Beruf: Student

  • Private Nachricht senden

7

17.05.2008, 15:44

Es ist ja auch nur ein Beispiel.. :)
Wir leben alle unter dem Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.

8

17.05.2008, 16:06

Dateioperationen ist Sache des Betriebssystem. Daran vorbei zu wollen ist nicht ratsam. Vielleicht liegt es ja an irgendwelchen Einstellungen oder USB 1.0. Am USB-Treiber wirst du wohl nicht vorbei kommen, wer soll die Daten den transportieren. Und am Treiber fuer das Dateisystem wirst du nicht vorbei kommen, wer soll wissen, wo die Daten liegen. Vielleicht schaust du dir auch die technischen Spezifikationen an, dann kannst du sagen, ob du am Limit bist oder nicht. Vielleicht hat dein Windows CE Geraet nicht sooo viel Speicher und muss staendig sachen auslagern. Was wird denn noch so nebenher aus deinem Geraet gemacht?

Randbedingungen gibt es viele, und alles bzw. deren Kombination koennen Ursachen sein.

riCo

Treue Seele

  • »riCo« ist der Autor dieses Themas

Beiträge: 165

Beruf: Student

  • Private Nachricht senden

9

29.05.2008, 08:42

Auf dem Gerät laufen nebenher noch 2 Anwendungen, die jedoch nicht gravierend in's Gewicht fallen. Laut Spezifikation handelt es sich um USB 1.1. :( Ich konnte den Leseprozess optimieren, indem ich einen 400KByte-Buffer lese mir dann die entsprechenden Daten aus dem Buffer hole. Damit spare ich mir das seek'en und es geht um einiges schneller, jedoch leider nicht schnell genug! Ich habe das ausschneiden in einen Thread ausgelagert damit das Programm nicht blockiert, aber für einen Bitmapausschnitt von kleiner 640x480 (die orginaldatei ist um ein vielfaches größer), brauche ich gut 6 bis 10 Sekunden. Leider weiß ich nicht, was ich an fread noch optimieren soll..
Wir leben alle unter dem Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.

Werbeanzeige