ローカルフォルダーからJSONを含むファイルをロードし、それを解析する次のコードがあります。
async public static void TryLoad(Callback Ok, Action Fail, string key, int offset)
{
try
{
var now = DateTime.Now;
ItemsCache cacheItem;
var folder = ApplicationData.Current.LocalFolder;
var stream = await folder.OpenStreamForReadAsync(key);
using (stream)
{
var result = await new StreamReader(stream).ReadToEndAsync();
Debug.WriteLine("Raw data loaded: " + (DateTime.Now - now).TotalMilliseconds);
cacheItem = JsonConvert.DeserializeObject<ItemsCache>(result);
Debug.WriteLine("Json has been parsed: " + (DateTime.Now - now).TotalMilliseconds);
stream.Close();
}
bool isOK = cacheItem.IsValid(offset);
if (isOK) Ok(cacheItem.Data); else Fail();
}
catch (Exception)
{
Fail();
}
}
そしてItemsCache
それ自体:
public class ItemsCache
{
public string Stamp { get; set; }
public JToken Data { get; set; }
public bool IsValid(int ofs)
{
DateTime moment = DateTime.Parse(Stamp);
return (DateTime.Now - moment).TotalSeconds < ofs;
}
}
データを2回続けてロードした後の出力:
Raw data loaded: 356,7372
Json has been parsed: 855,588
Raw data loaded: 1269,6079
Json has been parsed: 1300,8621
JSON:
{"Stamp":"26.01.2013 20:49:26","Data":[{"id":188357911,"user":123145, ... a few more more key-value pairs}, ... the rest of the objects]}
つまり、プロセス全体には約750ミリ秒かかり、そのうち150ミリ秒で生データをロードし、600ミリ秒でNewtonsoftJSONライブラリを使用してデータを解析します。データ自体の量は少なく、本質的に小さなキーと値のペアである約20のシリアル化されたオブジェクトが含まれています(ただし、さらに多くのデータを追加でき、解析時間にはあまり影響しません)。
問題は、データのロードにそれだけの時間がかかり、データの解析にさらに時間がかかるのが普通かどうかということです。正常でない場合はどうすればよいですか?