Google ProtocolBuffer.net简介与使用
protobuf-net是Google的ProtocolBuffer的.net实现。ProtocolBuffer是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。
引用protobuf-net.dll组件
1、能过特性定义ProtoBuf格式的类
[ProtoContract]
public class User
{
[ProtoMember(1, IsRequired = true)]
public int UserID { get; set; }
[ProtoMember(2, IsRequired = true)]
public string UserName { get; set; }
}
required表示在这个消息中这个字段是必须的,就像数据库中的非空字段一样的,必须要有值。
optional表示是可选的,可以有,也可以没有,对应到数据库中的就可空字段。
repeated表示这个字段是可以重复的,一个消息是可以有一个或多个这个字段的。
2、序列化:
using (Stream file = File.Create(path))
{
Serializer.Serialize<List<User>>(file, list);
file.Close();
}
3、反序列化:
List<User> list2 = new List<User>();
using (Stream file = File.OpenRead(path))
{
list2 = Serializer.Deserialize<List<User>>(file);
}
4、例子:
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<User> list = new List<User>();
for (int i = 0; i < 1000; i++)
{
list.Add(new User() { UserID = i, UserName = "u" + i.ToString() });
}
//json
string path2 = AppDomain.CurrentDomain.BaseDirectory + "json.txt";
System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();
string json = jss.Serialize(list);
File.WriteAllText(path2, json);
//protobuff
string path = AppDomain.CurrentDomain.BaseDirectory + "protobuf.txt";
using (Stream file = File.Create(path))
{
Serializer.Serialize<List<User>>(file, list);
file.Close();
}
List<User> list2 = new List<User>();
using (Stream file = File.OpenRead(path))
{
list2 = Serializer.Deserialize<List<User>>(file);
}
foreach (User u in list2)
{
Console.WriteLine(string.Format("UserID={0}, UserName={1}", u.UserID, u.UserName));
}
Console.ReadKey();
}
}
[ProtoContract]
public class User
{
[ProtoMember(1, IsRequired = true)]
public int UserID { get; set; }
[ProtoMember(2, IsRequired = true)]
public string UserName { get; set; }
}
}
测试结果:
json.txt 33k
protobuf.txt 11k
大小相差了3倍
参考资料:http://code.google.com/p/protobuf-net/
http://www.cnblogs.com/facebuyer/archive/2009/08/25/1553849.html
Windows Server 2008 R2 X64 + IIS7.5 + .net Framework 4 + WCF restful + ProtoBuf.Net + Base64String
Windows Server AppFabric + NLB + Application Request Routing
测试群集后的性能和效率:这几个结合测试,你会发现更高效的SOA方式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现