Windows phone 7 Windows Phone隔离存储性能中的魔力

Windows phone 7 Windows Phone隔离存储性能中的魔力,windows-phone-7,isolatedstorage,Windows Phone 7,Isolatedstorage,我把小文件合并成了大文件。在应用程序首次启动时,读取此文件,并在文件系统(独立存储)上逐个创建小文件 当该文件包含44个小文件且大小约为200kb时,该算法在设备上的运行时间为120ms。 当这个文件包含140个甚至更小的文件并且大约为400kb时,这个算法在设备上可以工作3000毫秒 如果我只从这两个文件中提取44个文件,第一个文件仍然可以工作约120毫秒,第二个文件可以工作约800毫秒 这对我来说似乎是个奇迹。 文件中的数据格式很简单 -INT32 - ENTRIES COUNT --STR

我把小文件合并成了大文件。在应用程序首次启动时,读取此文件,并在文件系统(独立存储)上逐个创建小文件

当该文件包含44个小文件且大小约为200kb时,该算法在设备上的运行时间为120ms。 当这个文件包含140个甚至更小的文件并且大约为400kb时,这个算法在设备上可以工作3000毫秒

如果我只从这两个文件中提取44个文件,第一个文件仍然可以工作约120毫秒,第二个文件可以工作约800毫秒

这对我来说似乎是个奇迹。 文件中的数据格式很简单

-INT32 - ENTRIES COUNT
--STRING ENTRY NAME         |
--INT32 ENTRY DATA LENGTH   |  REPEATS {ENTRY COUNT} TIMES
--BYTE[] ENTRY DATA         |
对我来说,这似乎是Windows Phone隔离存储机制中的一种魔力。 在复制相同数量的条目时,完全没有理由让第二个文件的速度慢7-8倍

重建计划-

代码:

publicstaticvoidcopycache(ILogger记录器)
{
使用(var isoStorage=IsolatedStorageFile.GetUserStoreForApplication())
{
var streamInfo=Application.GetResourceStream(新Uri(_dataFilePath,UriKind.RelativeOrAbsolute));
创建目录(“HttpCache”);
var binaryReader=新的binaryReader(streamInfo.Stream);
{
int itemscont=binaryReader.ReadInt32();
对于(int i=0;i

魔法

我在
WebClient
性能方面也有类似的问题。
在模拟器中请求需要0.3-0.5秒,在设备上需要8-22秒<我很困惑
但在我的例子中,解决方案非常简单:不要在调试模式下测试Desive的性能。

我所做的:

  • 将项目编译到您的设备
  • 停止调试
  • 关闭手机上的应用程序(最好重新启动设备)
  • 一切都很有魅力
  • 在您的测试应用程序中
    IsoStorageWonder

  • 模拟器
    551ms
  • 模拟器256 mB
    564ms
  • HTC雷达WP7.8调试模式
    1835ms
  • HTC雷达WP7.8非调试模式
    958ms
  • 我希望我的研究能帮助你<问候

    UPD

    使用
    output2进行测试

  • 模拟器
    440ms
  • 模拟器256 mB
    447ms
  • HTC雷达WP7.8调试模式
    287ms
    //非常好
  • HTC雷达WP7.8非调试模式
    144ms
    //也不错

  • 我不确定您是如何测试这些文件的,但我从这两个文件中得到了一致的17ms(+/-2ms)读数。Den,我认为您测试错了。不应使用枚举器,不应使用WP8,而应使用WP7。正如我所说,我在lumia 800上看到120ms。格里戈里,我把我的答案贴了出来,我也是明斯克人。很抱歉,非常感谢你的研究!你能用第二个文件测试一下吗?“output2”文件。请把你的时间测量结果贴在这里,但我只能在周一测试(
     public static void CopyCache(ILogger logger)
        {
            using (var isoStorage = IsolatedStorageFile.GetUserStoreForApplication())
            {
                var streamInfo = Application.GetResourceStream(new Uri(_dataFilePath, UriKind.RelativeOrAbsolute));
    
                isoStorage.CreateDirectory("HttpCache");
    
                var binaryReader = new BinaryReader(streamInfo.Stream);
                {
                    int itemsCount = binaryReader.ReadInt32();
    
                    for (int i = 0; i < ENTRIES_COUNT; i++)
                    {
                        string fileName = binaryReader.ReadString();
                        int length = binaryReader.ReadInt32();
                        byte[] data = binaryReader.ReadBytes(length);
    
                        using (
                            var fileStream =
                                new IsolatedStorageFileStream(
                                    Path.Combine(_rootCacheDir, fileName),
                                    FileMode.Create,
                                    FileAccess.Write,
                                    FileShare.None,
                                    isoStorage))
                        {
                            fileStream.Write(data, 0, data.Length);
                        }
                    }
                }
            }
        }