C# 从文件解析JSON需要很多时间

C# 从文件解析JSON需要很多时间,c#,json,performance,json.net,windows-phone-8,C#,Json,Performance,Json.net,Windows Phone 8,我有以下代码从本地文件夹加载一个带有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.LocalFol

我有以下代码从本地文件夹加载一个带有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();
    }
}
一行加载两次数据后的输出:

Raw data loaded: 356,7372
Json has been parsed: 855,588
Raw data loaded: 1269,6079
Json has been parsed: 1300,8621
JSON:

整个过程大约需要750毫秒,其中150毫秒加载原始数据,600毫秒使用Newtonsoft JSON库解析数据。数据量本身很小,包含大约20个序列化对象,这些对象本质上是一个小的键值对(尽管我发现我可以添加更多的数据,并且不会对解析时间产生太大影响)


问题是,加载数据花费这么多时间,解析数据花费更多时间,这是否正常?如果不正常,我该怎么办?

请在同一流程中重复相同的步骤两次,测量每次迭代,并在问题中提供结果-很有可能您正在测量初始JIT/代码生成时间以进行反序列化,不是JSON的实际解析。您也可以尝试ServiceStack.Text JSON序列化库-它甚至比JSON更快。Net@JoannaTurban我尝试过这个库,但遇到了一些问题:你能展示一下你试图解析的JSON吗?所以第二次解析花了30毫秒——看起来JSON.Net在第一次反序列化时需要做很多事情特定类型(毫不奇怪,类似于XmlSerialization)。。。
Raw data loaded: 356,7372
Json has been parsed: 855,588
Raw data loaded: 1269,6079
Json has been parsed: 1300,8621
{"Stamp":"26.01.2013 20:49:26","Data":[{"id":188357911,"user":123145, ... a few more more key-value pairs}, ... the rest of the objects]}