2013-04-25 50 views
0

我已將小文件合併爲一個大文件。在應用程序第一次啓動時,讀取此文件,並在文件系統(獨立存儲)上創建一個個小文件。Windows Phone中的魔法獨立存儲性能

當這個文件包含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的IsolatedStorage機制魔法。 複製相同數量的條目時,完全沒有理由讓第二個文件以7-8倍的速度工作。

攝製項目 - https://www.dropbox.com/s/6bjsve7p8wew3kb/IsoStorageWonder.zip?m

代碼:

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); 
        } 
       } 
      } 
     } 
    } 

MAGIC!

+0

我不知道你如何測試這些,但我從這兩個文件得到一致的17ms(+/- 2ms)讀數。 – 2013-04-26 00:58:58

+0

鄧,我認爲你測試錯了。不是enumlator,不應該使用WP8,而是WP7。正如我所說我看到Lumia 800 120ms。我不知道你是怎麼得到17。 – Grigory 2013-04-26 10:28:27

+0

Grigory,我張貼我的答案,我也來自明斯克))。 Offtop,對不起。 – jimpanzer 2013-04-26 14:15:37

回答

1

我有與WebClient性能類似的問題。
在模擬器請求需要0.3-0.5秒,在設備8-22秒。
我很困惑。
但在我的情況下,解決方案非常簡單:不要在調試模式下測試設備的性能。

我做什麼:

  1. 編譯項目到您的設備。
  2. 停止調試
  3. 的電話(和更好的重新啓動設備)
  4. 像一個魅力的所有作品))

關閉您的應用程序在測試應用IsoStorageWonder

  1. 模擬器551ms
  2. 仿真器256 mB 564ms
  3. HTC R阿達爾WP7.8調試模式1835ms
  4. HTC雷達WP7.8無法調試模式958ms

我希望我的可測量類的幫助你。
問候

UPD

測試與output2

  1. 模擬器440ms
  2. 模擬器256 MB 447ms
  3. HTC雷達WP7.8調試模式287ms //非常漂亮
  4. HTC雷達WP7.8未調試Mod e 144ms //還不錯
+0

感謝百萬研究!你可以用第二個文件測試嗎? 「output2」文件。並在此發佈您的時間尺寸plz – Grigory 2013-04-26 15:39:11

+0

對不起,但我只能在星期一進行測試( – jimpanzer 2013-04-26 15:53:49

+0

@Grigory,我更新了我的答案 – jimpanzer 2013-04-29 08:58:33

相關問題