0

ローカルフォルダーから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のシリアル化されたオブジェクトが含まれています(ただし、さらに多くのデータを追加でき、解析時間にはあまり影響しません)。

問題は、データのロードにそれだけの時間がかかり、データの解析にさらに時間がかかるのが普通かどうかということです。正常でない場合はどうすればよいですか?

4

0 に答える 0