PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : kleines Tool


devor
02.01.2005, 19:07
Hey Leute
Ich hab da grad ne gut idee. Ich möchte ein Tool machen für kopieren. Das klingt jetzt vielleicht blöd aber last mich mal weitermachen...
Also ... ich will eins machen das möglichst schneller ist als explorer oder so, falls das geht.

Als erstes wollt ich fragen ob es ne schnellere methode gibt als streams? Der größte vorteil soll an einem Buffer mit variabler größe und multithreading umgbebung liegen.

Was haltet ihr von der Idee? Es können sich natürlich Leute melden die mitmachen wollen.

Wenns allerdings keine bessere möglichkeit gibt und Win eh schon multith. verwendet und so dann brauch ma das natürlich ned anfangen... deshalb frag ich ja erst mal nach:D !

Inspieriert hat mich vorallem mein computer der 1. gerade was hat (beim kopieren und so) und 2. bei kopiervorgängen vielleicht 10% für kopieren braucht und 90% Leerlauf hat und fast nichtmehr auf die Maus reagiert!
hat 2.5 Gig.Herz!!!!;)
Wollt ma auch anschauen wie das mit belegen von proz. zeit geht! (Sowie cpugrab wer das kennt!) Damit ma auch wärend dem Arbeiten und musikhören und vielleicht auch spielen etwas kopieren kann.

Programm könnt ma nat. erweitern soviel ma will.
MFG Manuelh87


Jan Krüger
03.01.2005, 10:33
Hi,

[...] Also ... ich will eins machen das möglichst schneller ist als explorer oder so, falls das geht.
Vergiss es.

Als erstes wollt ich fragen ob es ne schnellere methode gibt als streams? Der größte vorteil soll an einem Buffer mit variabler größe und multithreading umgbebung liegen.
Intern werden Streams normalerweise gebuffert. Multithreading ist relativ zweckfrei, denn:
* Die Threads werden auf dem gleichen Prozessor ausgeführt, man kriegt also nicht mehr Leistung als vorher. Im Gegenteil: jetzt muss das Betriebssystem noch zwischen den Threads umschalten, und das braucht auch ein bisschen Leistung.
* Selbst, wenn das System mehrere Prozessoren hat: die Festplatte wird davon auch nicht schneller, und beim Kopieren von Festplatte zu Festplatte ist es eben die Platte, die von allen Beteiligten am langsamsten ist.

Inspieriert hat mich vorallem mein computer der 1. gerade was hat (beim kopieren und so) und 2. bei kopiervorgängen vielleicht 10% für kopieren braucht und 90% Leerlauf hat und fast nichtmehr auf die Maus reagiert!
Möglicherweise kann man da was drehen...
* welche Festplatte(n) hast du?
* von wo nach wo (Netzwerk? Internet über DSL? Diskette? Andere Partition auf der gleichen Platte) kopierst du?
* welches Betriebssystem?
* was läuft außerdem noch im System (Virenscanner, ...?)

Wollt ma auch anschauen wie das mit belegen von proz. zeit geht! (Sowie cpugrab wer das kennt!) Damit ma auch wärend dem Arbeiten und musikhören und vielleicht auch spielen etwas kopieren kann.
Du kannst im Taskmanager von Windows 2000 und aufwärts (Win 2000: Strg-Shift-Esc, Win XP: Strg-Alt-Entf) die CPU-Priorität von Prozessen umstellen. Wenn du die Priorität niedriger einstellst, kriegt ein Prozess weniger CPU-Zeit vom Betriebssystem zugewiesen (und lässt somit den anderen Prozessen mehr Luft).
Für alle älteren Windows-Versionen gibt es da z.B. WinTop aus den Windows Power Toys.

Alles klar?

devor
04.01.2005, 01:20
Is ma klar mit taskman und so..
Bei Multithreading meinte ich ja nur das der proz. vielleicht während eines schreibvorganges oder wärend der zeit in der er nix tun kann wieder neue Daten holt... Ich glaub ned dass das der explorer macht... ich glaub der liest und dann schreibt er. Aber bei der anderen Methode könnte er während er liest und dort ne pause machen muss etwas anderes schreiben!

Kennst du cpugrab? da kann man nähmlich die genauen % einstellen und net nur die Priorität.

Mein System ist höchstwahrscheinlich irgendwie infiziert und daher so lahm beim schreiben von Partition1 auf 2! Das hat auch ned wirklich was mit explorer zu tun. Aber ich fänds halt günstig wenn man z.b. 20% einstellt und der rest echt frei bleibt.

Meinst du noch immer das es keine gute idee ist??
cu devor

Jan Krüger
04.01.2005, 05:13
Ja. Tut mir Leid. ;)

Mit Multithreading lässt sich kein merkbarer Unterschied erreichen, ehrlich. Es wird genau ein Thread zum Kopieren benutzt. Was soll ein anderer Thread auch tun können? Entweder der Kopierthread hat was zu tun (dann kopiert er), oder er ist fertig. Während eines Schreibvorganges wiederum könnte auch ein zweiter Thread nichts ausrichten, denn zwei I/O-Operationen gleichzeitig gehen nunmal nicht -- intern werden die immer nacheinander ausgeführt, auch wenn du 234589075 Prozessoren auf dem Board hast. Für Threads gilt natürlich das Gleiche.

Eine genaue Einstellung der CPU-Zeit halte ich für sinnlos -- der Scheduler vom System hat nunmal nicht so viele Prioritätsstufen, und Nachpriorisierung im Userspace macht das System sicher alles, aber nicht schneller.

Warum das Kopieren von Partition zu Partition generell recht langsam ist, kann ich dir verraten: zwischen jeder Lese- und Schreiboperation muss der Festplattenkopf zwischen den Partitionen hin- und herfahren ("seeking"), und das dauert. Besonders schlimm wird's, wenn auch noch irgendwas anderes die Festplatte benutzt (z.B. ein Virenscanner, der die Dateien dabei auch noch überprüft, oder ein Download, oder OOo Writer, oder du hast zu wenig RAM und es wird ständig geswappt, oder was auch immer).
Um da Abhilfe zu schaffen, könntest du vielleicht den Dateisystemcache vergrößern (oder dir eben doch ein Kopierprogramm schreiben, das einen eigenen, ziemlich großen Cache benutzt), das verringert die Zahl der Seeks und macht die Sache somit etwas schneller.