Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];

Вниз

Read Disk   Найти похожие ветки 

 
Cj ©   (2007-06-28 17:40) [0]

Подскажите как можно по быстрее считать диск, а то ReadFile уж больно медленная.


 
Джо ©   (2007-06-28 17:41) [1]

> а то ReadFile уж больно медленная.

Аргументы?


 
Johnmen ©   (2007-06-28 17:44) [2]

А что потом делать с диском? Со считанным?


 
Германн ©   (2007-06-28 17:49) [3]


> Johnmen ©   (28.06.07 17:44) [2]
>
> А что потом делать с диском? Со считанным?
>

После прочтения съесть.


 
Игорь Шевченко ©   (2007-06-28 17:51) [4]


> а то ReadFile уж больно медленная.


Другого нет. Читай большими кусками


 
homm ©   (2007-06-28 17:55) [5]

> а то ReadFile уж больно медленная.

А может не она медленная, а используешь ты ее криво? Код давай.


 
Johnmen ©   (2007-06-28 17:58) [6]

Для считывания диска надо применять ReadDisk, а ReadFile здесь непричём...


 
Cj ©   (2007-06-28 17:58) [7]

Но BlockRead тоже обращается к диску, а работает намного быстрей, и WinHex быстро считывает


 
Anatoly Podgoretsky ©   (2007-06-28 18:48) [8]

> Cj  (28.06.2007 17:58:07)  [7]

BlockRead обращается к файлу
А что такое диск?


 
Cj ©   (2007-06-28 19:22) [9]

читает она файл, но фаил-же на диске


 
oldman ©   (2007-06-28 19:26) [10]


> Cj ©   (28.06.07 19:22) [9]
> читает она файл, но фаил-же на диске


Ну и что? Тему развивай...


 
Cj ©   (2007-06-28 19:31) [11]

ну так вот она читает файл с диска быстре чем ReadFile читает диск. Короче, как ускорить чтение диска?


 
Anatoly Podgoretsky ©   (2007-06-28 19:37) [12]

> Cj  (28.06.2007 19:31:11)  [11]

ReadFile не читает диск.
Попробуй еще развить тему, поднапрягись.


 
Cj ©   (2007-06-28 19:47) [13]

читает.: CreateFile, ReadFile


 
Anatoly Podgoretsky ©   (2007-06-28 19:48) [14]

> Cj  (28.06.2007 19:47:13)  [13]

Это чтение файла.


 
Cj ©   (2007-06-28 19:58) [15]

CreateFile("\\.\C:\", итд. вот и будет диск открыт


 
begin...end ©   (2007-06-28 19:59) [16]

> Cj ©   (28.06.07 17:58) [7]

Открою секрет: процедура BlockRead для чтения файла использует функцию ReadFile.


 
Cj ©   (2007-06-28 20:09) [17]

а чё же тогда ReadFile читает медленнее, раз Blockread через неё выходит на файл


 
Правильный Вася   (2007-06-28 20:12) [18]

не надо читать по одному байту (так, как ты сейчас в час по чайной ложке выдавливаешь из своего тюбика инфу для нас)


 
begin...end ©   (2007-06-28 20:27) [19]

> Cj ©   (28.06.07 20:09) [17]

См. [5].


 
просто_ник ©   (2007-06-29 01:20) [20]

а у вас есть функция чтобы считать cd-rom, очень нужно


 
Германн ©   (2007-06-29 02:00) [21]


> просто_ник ©   (29.06.07 01:20) [20]
>
> а у вас есть функция чтобы считать cd-rom, очень нужно
>

Есть конечно. У нас всё есть. ReadFile, например.


 
Джо ©   (2007-06-29 02:19) [22]

> [21] Германн ©   (29.06.07 02:00)
> Есть конечно. У нас всё есть. ReadFile, например.

А я могу дать BlockRead. По неподтвержденным слухам, она работает быстрее :-D


 
Германн ©   (2007-06-29 02:46) [23]


> Джо ©   (29.06.07 02:19) [22]
>
> > [21] Германн ©   (29.06.07 02:00)
> > Есть конечно. У нас всё есть. ReadFile, например.
>
> А я могу дать BlockRead. По неподтвержденным слухам, она
> работает быстрее :-D
>

Ну так у тебя штаны особые :)


 
Cj ©   (2007-06-29 04:44) [24]


> begin...end ©   (28.06.07 20:27) [19]
> > Cj ©   (28.06.07 20:09) [17]См. [5].


вот:

var
f:cardinal;
a:array[1..BootSize]of byte;
r:cardinal;
s:string;
count:cardinal;
begin
f:=createfile (pchar("\\.\"+edit1.Text+":"),
             GENERIC_READ,FILE_SHARE_READ,
             nil,OPEN_EXISTING,FILE_FLAG_RANDOM_ACCESS,0);
readfile(f,a,sizeof(a),r,nil);
count:=1;
for h:=1  to data.RowCount-1 do
 begin
 count:=count+1;
s:=s+inttohex(a[count],2);
 end;

CloseHandle(f);
end;

что неправильно?


 
Cj ©   (2007-06-29 04:45) [25]


> a:array[1..BootSize]of byte;


BootSize - это 1024


 
Cj ©   (2007-06-29 04:46) [26]

вот правильней

var
f:cardinal;
a:array[1..1024]of byte;
r:cardinal;
s:string;
count:cardinal;
begin
f:=createfile (pchar("\\.\"+edit1.Text+":"),
            GENERIC_READ,FILE_SHARE_READ,
            nil,OPEN_EXISTING,FILE_FLAG_RANDOM_ACCESS,0);
readfile(f,a,sizeof(a),r,nil);
count:=1;
for h:=1  to 1024*1024 do //считать один метр
begin
count:=count+1;
s:=s+inttohex(a[count],2);
end;

CloseHandle(f);
end;


 
ЮЮ ©   (2007-06-29 05:32) [27]

> s:=s+inttohex(a[count],2);

1024*1024 раз перераспределять память - не может быть быстро.


> //считать один метр

непосредственно из файла считтывается только один раз 1024 байта - до цикла. В цикле только дерганье памяти. где считывание?


> a:array[1..1024]of byte

a[count], где count 1...1024*1024
за границы массива не страшно вылазить? :)

И после всего этого, виновата ReadFile


 
SlymRO ©   (2007-06-29 05:54) [28]

а так?
f:cardinal;
a:array[0..BootSize-1]of byte;
r:cardinal;
s,ss:string;
count:cardinal;
begin
f:=createfile (pchar("\\.\"+edit1.Text+":"),
            GENERIC_READ,FILE_SHARE_READ,
            nil,OPEN_EXISTING,FILE_FLAG_RANDOM_ACCESS,0);
readfile(f,a,sizeof(a),r,nil);
CloseHandle(f);
SetLength(s,sizeof(a)*2);
for h:=Low(a) to High(a) do
begin
 ss:=inttohex(a[h],2);
 move(ss[1],s[h*2],2);
end;
end;


 
ЮЮ ©   (2007-06-29 06:02) [29]

> [28] SlymRO ©   (29.06.07 05:54)

Лучше. Но
1) не грех воспользоваться r, ибо могли считать и меньше
 SetLength(s, 2 * r);
 for h := 0 to r do

2) s[h*2] === 0 на первом шаге итерации
 s[2 * h + 1]


 
SlymRO ©   (2007-06-29 06:31) [30]

ЮЮ ©   (29.06.07 6:02) [29]
писал в блокноте... не проверял естесно...


 
homm ©   (2007-06-29 07:22) [31]

> [26] Cj ©   (29.06.07 04:46)


Ну а теперь вот так попробуй, и скажи долго ли работает ReadFile.

var
f:cardinal;
a:array[1..1024]of byte;
r:cardinal;
s:string;
count:cardinal;
begin
f:=createfile (pchar("\\.\"+edit1.Text+":"),
           GENERIC_READ,FILE_SHARE_READ,
           nil,OPEN_EXISTING,FILE_FLAG_RANDOM_ACCESS,0);
readfile(f,a,sizeof(a),r,nil);
CloseHandle(f);
end;


 
Dimaxx ©   (2007-06-29 16:12) [32]


>count:=1;
>for h:=1  to data.RowCount-1 do
>begin
>  count:=count+1;
>  s:=s+inttohex(a[count],2);
>end;

Лучче брось это дело, раз пишешь такие вот "орехи". Не проще было:

for h:=1 to data.RowCount-1 do
begin
 s:=s+inttohex(a[h+1],2);
end;



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.042 c
11-1166033779
NeeDiGeo
2006-12-13 21:16
2007.07.22
Глобальные клавиши


15-1182752797
de.
2007-06-25 10:26
2007.07.22
Открыть часть набора данных


11-1165910389
КВАНТ
2006-12-12 10:59
2007.07.22
KOLRichEdit.URL & VCLRichEdit.URL


15-1182442216
oxffff
2007-06-21 20:10
2007.07.22
Codegear Roadmap


15-1182169577
русланннннннн
2007-06-18 16:26
2007.07.22
Ошибка Ado





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский