Tha*_*ven 12 .net c# json.net windows-phone-7.1
我有一个问题 - Json.Net序列化我的对象真的很慢.我有一些基本的课程:
public class authenticationRequest
{
public string userid;
public string tid;
public string token;
public string platform;
public string version;
}
Run Code Online (Sandbox Code Playgroud)
我正在将它序列化
string jsonDataToSend = JsonConvert.SerializeObject(dataToSend);
Run Code Online (Sandbox Code Playgroud)
此操作大约需要1900毫秒.与来自Json.net CodePlex页面的信息相比:

这需要很长时间.出于测试目的,我将我的类换成了一个简单的字符串:
string jsonDataToSend = JsonConvert.SerializeObject("fsdfsdfsdfs");
Run Code Online (Sandbox Code Playgroud)
转换仍需要约900毫秒.是什么原因?我能做些什么来更快地序列化这些数据?
Fro*_*nce 13
我正在处理的项目遇到了同样的问题,我按照此页面上的建议解决了这个问题:http: //www.newtonsoft.com/json/help/html/Performance.htm
具体来说,他们建议在性能至关重要时手动序列化对象:
public static string ToJson(this Person p)
{
StringWriter sw = new StringWriter();
JsonTextWriter writer = new JsonTextWriter(sw);
// {
writer.WriteStartObject();
// "name" : "Jerry"
writer.WritePropertyName("name");
writer.WriteValue(p.Name);
// "likes": ["Comedy", "Superman"]
writer.WritePropertyName("likes");
writer.WriteStartArray();
foreach (string like in p.Likes)
{
writer.WriteValue(like);
}
writer.WriteEndArray();
// }
writer.WriteEndObject();
return sw.ToString();
}
Run Code Online (Sandbox Code Playgroud)
我在VB中的示例如下所示:
Public Function SerializeWords(ByRef oWords As List(Of Word))
Dim sb As New StringBuilder
Dim sw As New IO.StringWriter(sb)
Using oWriter As Newtonsoft.Json.JsonWriter = New Newtonsoft.Json.JsonTextWriter(sw)
With oWriter
.WriteStartArray()
For Each oWord As Word In oWords
.WriteStartObject()
.WritePropertyName("ID")
.WriteValue(oWord.ID)
.WritePropertyName("Phonics")
.WriteValue(oWord.Phonics)
.WritePropertyName("Word_")
.WriteValue(oWord.Word_)
.WritePropertyName("WordLength")
.WriteValue(oWord.WordLength)
.WriteEndObject()
Next
.WriteEndArray()
End With
End Using
Return sb.ToString
End Function
Run Code Online (Sandbox Code Playgroud)
请注意它是如何强类型的.我相信当你使用
Newtonsoft.Json.JsonConvert.SerializeObject()
它时使用反射来完成工作(当你有许多具有许多属性的对象时,它可以真正加起来).
无论如何......一旦我编写了自己的序列化程序,我的序列化250个单词的时间从使用JsonConvert.SerializeObject()方法的28秒到使用我自己的函数的31毫秒.
我相信这里发生的事情是你在加载Json.Net库时会遇到延迟.您应该尝试在发布模式下进行编译,以查看事情是否显着加快,因为这样可以防止加载符号(这可能会增加库加载时间).
如果它仍然是一个问题,请在您的应用程序中找到一个好时机,您可以进行虚拟序列化(甚至可能在后台线程上)以强制加载库.但是它有点代码味道,所以可能有一种更好的方法来强制加载,但这是一种应该始终有效的强力方法.
| 归档时间: |
|
| 查看次数: |
13305 次 |
| 最近记录: |