代码之家  ›  专栏  ›  技术社区  ›  user5326354

获取在每个平台中在x秒内打开的最大文件大小

  •  0
  • user5326354  · 技术社区  · 7 年前

    我的应用程序将部署在具有不同硬件的不同平台上。我想找到在安装应用程序的用户平台中,在x秒内打开的最大文件大小。有没有办法编写一个c#脚本类型的应用程序,甚至是一个python,它会产生与用户打开文件所花费的时间类似的行为?

    我曾想过创建一个文件,然后以线性方式将其增加到大约x秒才能打开,比如:

    int currentFileSize = 10* (int)Math.pow(2,20) // 20MB;
    CreateFile(currentFileSize);
    
    var secondsTook = Testopen performance(currentFileSize); // Measure open time with stopwatch
    While (Math.Abs(DesiredTimeInSeconds-SecondsTook)>DesiredTimeInSeconds / 1000) 
    {
       // Increase file size somehow.
       // Repeat
    }
    
    return currentFileSize;
    

    如果我每轮都创建一个全新的文件 File.Open() 用户通过资源管理器打开文件所需的确切时间?你建议我怎么做这样的测试?

    编辑:

    其想法是,该测试将在每个端点上运行。根据该测试,我将在每个平台中设置不同的最大文件长度。 此外,在这个测试中,我的目的是每次创建一个新文件,因此我希望禁用与特定文件缓存相关的任何内容。含义:创建文件1。继续=删除文件1,创建全新的文件2。那不管用吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Patrick Artner    7 年前

    不,不会的。您的请求是IO绑定的,根据安装的硬件的不同,其行为非常不同。SSD比HDD快得多,还有混合硬盘等。你无法得到适用于任何系统的“数字”,因为它在很大程度上取决于它运行的系统。

    您也不能在每个系统上进行“测试”,因为从硬盘访问数据时涉及到缓存机制:如果您访问一个文件并再次访问它,它可能会从硬盘的缓存数据中获取,第二次加载要快得多。

    要获取可靠的数据,您必须以某种方式绕过操作系统的缓存机制和硬盘驱动器本身,即使使用正确的标志和低级调用,硬盘驱动器也可能会忽略这些机制: FILE_FLAG_NO_BUFFERING & FILE_FLAG_WRITE_THROUGH - The old new thing blog