Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.22;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.028 c
2-1182424026
Dib@zol
2007-06-21 15:07
2007.07.22
Чтение из середины


9-1156790642
Tar[OFF]
2006-08-28 22:44
2007.07.22
BIG DirectX SDK


15-1182250090
Thely
2007-06-19 14:48
2007.07.22
Где почитать о 3-х звенной архитектуре


2-1182752139
Washington
2007-06-25 10:15
2007.07.22
"Резиновый" дизайн


2-1182939554
zvm
2007-06-27 14:19
2007.07.22
как проще сделать примитивную 3D графику?