Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2010, 10:33   #1
smalsvoloch
 
Регистрация: 06.10.2009
Сообщений: 8
Вопрос узнать программно скорость записи на диск

Добрый день. Требуется программно узнать скрость записи на hdd:
Препод дал такое описание (делать надо именно так):
3. Скорости чтения \ записи на диск могут быть определены по следующему алгоритму:
1) В переменных описываются бестиповый файл и одномерный массив данных (для уменьшения погрешности он не должен быть слишком маленьким, достаточный размер – около 10 МБ).
2) Бестиповый файл открывается для чтения \ записи на том диске, на котором проводятся измерения.
3) При помощи функции GetTickCount: integer засекается время начала чтения \ записи Tb.
4) Производится чтение \ запись массива данных в файл.
5) При помощи функции GetTickCount: integer засекается время окончания чтения \ записи Te.
6) Файл закрывается.
7) Скорость чтения \ записи S рассчитывается по формуле
S = (Размер Массива) / (Te - Tb) .

ну вот что у меня получилось:
Код:
 BufSize =  round(10485760/sizeof(real))+1;

  type tspeed=record
        w,r:longint;
        end;
        tmas=array [1..BufSize] of real;
        pmas=^tmas;

... 
function speedometer(letter:char):tspeed;
var f:file; tb, te:longint;  tmp:tspeed;   res:longint;
buffArray : pmas;
i:longint;
begin
GetMem(buffArray,128*81920+1);
for i:=1 to BufSize do buffarray[i]:=1;
tmp.r:=0;
tmp.w:=0;
{$I-}
res:=sizeof(buffarray);
assignfile(f,letter+':/tmp');
Rewrite(f, 1);
if Ioresult<> 0 then
  begin
  result:=tmp;
  exit;
  end;
tb:=GetTickCount;
BlockWrite(f, res, 1024*2,res);
te:=GetTickCount;
tmp.w:=te-tb;
close(f);
reset(f,128);
if Ioresult<> 0 then
  begin
  result:=tmp;
  exit;
  end;
tb:=GetTickCount;
BlockRead(f, buffArray, 1024);
te:=GetTickCount;
tmp.r:=te-tb;
close(f);
erase(f);
result:=tmp;
end;//speedometer
работать не хочет, не могу разобраться как создать 10 метровый файл.
Сделал пока так:

Код:
BufSize =  512 * 1024;

  type tspeed=record
        w,r:longint;
        end;
        tmas=array [1..BufSize] of byte;
function speedometer(letter:char):tspeed;
var f:file; tb, te:longint;  tmp:tspeed;
byffArray : tmas;
i:longint;
begin
tmp.r:=0;
tmp.w:=0;
{$I-}
assignfile(f,letter+':/tmp');
Rewrite(f, 1024);
if Ioresult<> 0 then
  begin
  result:=tmp;
  exit;
  end;
tb:=GetTickCount;
for i:=1 to 20 do
BlockWrite(f, byffArray, 512);
te:=GetTickCount;
tmp.w:=te-tb;
close(f);
reset(f,1024);
if Ioresult<> 0 then
  begin
  result:=tmp;
  exit;
  end;
tb:=GetTickCount;
for i:=1 to 20 do
BlockRead(f, byffArray, 512);
te:=GetTickCount;
tmp.r:=te-tb;
close(f);
erase(f);
result:=tmp;
end;//speedometer
Подскажите где в 1 случае ошибка. Он максимум 8 кБ создает файл.... такой файл даст нам большую погрешность...

tmp.r:=te-tb; - логика обработки времени. Она ошибочна, пока я ее не думал путем писать....(вычислять будет именно скорость в последствии)
smalsvoloch вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программно задать скорость в конфигурации модема lesey Общие вопросы Delphi 2 21.07.2009 10:22
Как узнать скорость при закачке tIdHttp.get? Altera Работа с сетью в Delphi 7 09.04.2009 11:27
Снизилась скорость записи на HDD (SATA) EducatedFool Компьютерное железо 12 06.03.2009 16:59
Как узнать программно скорость чтения и записи на жесткий диск. начинающий кодер Общие вопросы Delphi 7 05.03.2009 16:13
Скорость записи на флешку. DelphiMan Общие вопросы Delphi 2 31.01.2009 17:51