首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

写入速度的有关问题。

2012-04-20 
写入速度的问题。。。最近在做一个关于写文件的东东,其中有一个问题很是不解:单线程全速写文件比多线程写文件

写入速度的问题。。。
最近在做一个关于写文件的东东,其中有一个问题很是不解:单线程全速写文件比多线程写文件要快?!   ---我也不知道这个结论对不对,所以来问一下。
注:每一个线程对应一个文件。下面是写文件的代码。其中FIndex为线程的顺序。。。这个不会有重复的。
procedure   TTestThr.Execute;
var
    FileStr:   String;
    FileHandle:   integer;
    Str:   String;
begin
    {   Place   thread   code   here   }
    Str:=   '我们都是中国人,我们都是中国人,我们都是中国人, ';
    Str:=   Str+   Str+   Str+   cNewLine;
    FileStr:=   'ceshi '+   IntToStr(FIndex)+   '.txt ';
    FileHandle   :=   FileCreate(FileStr);
    try
        while   not   Terminated   do
        begin
            FileWrite(FileHandle,   Str[1],   Length(Str));
            //Sleep(1);
        end;
    finally
        FileWrite(FileHandle,   '#13 ',   1);
        FileClose(FileHandle);
    end;
end;

[解决办法]
如果楼主的机器只有一个CPU,并且不支持HT技术,那样的话,如果一个程序开有多个线程,则同样长的时候,由于CPU资源只有一份,多个线程来分CPU的时间做能做的事当然会比,全部CPU资源用于一个线程做的事情少,不知道楼主有没有把几个线程的文件内容总量加起来?另外多个线程之间切换还需要时间,这些耗损有没计算上去?为什么通常说在写文件的时候要开立线程,原因并不是在于多线程写文件的速度比单线程快,而是写文件速率有限而整个过程需要时间,必须要进行相当时间的同步,而这些同步时间线程是处于等待的,开立线程来写文件,可以使得工作线程(可能是主线程,也可能是另外一个子线程)在将需要写入文件的内容移动到缓冲区(内存,比如变量啦,内存块等),而继续工作。
[解决办法]
还有,无论是单线程还是多线程,硬盘同时都只能写一个位置。磁盘阵列除外。

热点排行