3

我有一个程序正在发出网络请求,然后分解响应。内容类型是 JSON,我目前将响应视为字符串并使用子字符串对其进行解码。

string bidnumber = "buyNowPrice";
int startbid = tradetemp.IndexOf(bidnumber) + 13;
int bidlength = 10;
string bidtemp = tradetemp.Substring(startbid, bidlength);
string endbid = ",";
int endbid2 = bidtemp.IndexOf(endbid);
int bidlength2 = endbid2;
string bidtmp = bidtemp.Substring(0, bidlength2);
long bid = Convert.ToInt64(bidtmp);

我为大约 5 个变量执行此操作,并且不断地一遍又一遍地执行此操作。问题是使用 JSON 解析会比我当前的代码更有效(更快)。使用 JSON 解析会使我的代码更简洁,但这里速度是优先考虑的。

4

3 回答 3

5

使用 JSON 解析。作为程序员,你可能犯的最大错误之一就是说速度很重要,并因此编写长而可怕的代码。这种方法有几个问题。

  1. 速度有多重要?如果您可以消除 70% 的书面代码以换取 10 毫秒的性能,这可以接受吗?如果不实施编写良好的解决方案并亲眼看到它,您就无法知道权衡取舍。

  2. 您认为会消耗性能的东西不一定会消耗性能。快速编写代码并不一定能解决性能问题,因为您需要测试它的性能。

  3. 你准备承受多少头痛来换取“速度”?同样,在进行基准测试之前您不知道速度有多快,但是编写不佳的代码,或者甚至是冗长而混乱的代码都会大大增加维护程序的成本。不要小看这一点。

我强烈建议您使用 VS 2012 中默认包含的 JSON.NET 库。我已经使用了很多次,并且总体印象非常深刻。它干净且易于使用。实施它,然后进行基准测试。我想你会印象深刻的。

于 2012-12-03T15:08:36.487 回答
4

您可以随时尝试并衡量与您的代码相比的性能。但我建议您使用 JSON 解析器,因为这将使您的代码更加稳定。这是nice comparison.NET 的不同 JSON 序列化程序。如果速度对您来说非常重要,ServiceStack 的 JSON 序列化程序是最快的序列化程序之一。

也不要忘记阅读stop rolling your CSV parser文章。

于 2012-12-03T15:07:19.953 回答
0

JSON解析肯定会更有效。它会让你的代码更简洁,而且它会像你想要的一样快。每个人都推荐的最好的方法是使用:JSON.NET

它被证明比标准的 C# JavascriptSerializer 更快。JSON.NET 使序列化和反序列化对象变得轻而易举,并且快速高效地完成。

页面底部有 JSON.NET 与常规 C# JSON 库的性能比较。

于 2012-12-03T15:08:55.047 回答