我已將小文件合併爲一個大文件。在應用程序第一次啓動時,讀取此文件,並在文件系統(獨立存儲)上創建一個個小文件。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!
我不知道你如何測試這些,但我從這兩個文件得到一致的17ms(+/- 2ms)讀數。 – 2013-04-26 00:58:58
鄧,我認爲你測試錯了。不是enumlator,不應該使用WP8,而是WP7。正如我所說我看到Lumia 800 120ms。我不知道你是怎麼得到17。 – Grigory 2013-04-26 10:28:27
Grigory,我張貼我的答案,我也來自明斯克))。 Offtop,對不起。 – jimpanzer 2013-04-26 14:15:37