我有两个像Object1和的复杂对象Object2.他们有大约5个级别的子对象.
我需要最快的方法来说明它们是否相同.
怎么可以在C#4.0中完成?
我目前正在使用二进制格式化程序(Remoting)来序列化和反序列化对象以便在我的LAN周围发送.
我最近从2.0升级到.NET 3.5.3.5有没有引入任何新类型来提高序列化性能?
我已经看过了DataContractSerializer,但这会将任何内容序列化为基础XML ...这必须增加内存占用.
什么是在LAN上发送对象的最快串行器?我不关心互操作或版本控制...... 我需要速度!
我对第三方开源替代品持开放态度.
我有以下对象:
public partial class Game
{
public bool Finished { get; set; }
public Guid GameGUID { get; set; }
public long GameID { get; set; }
public bool GameSetup { get; set; }
public Nullable<int> MaximumCardsInDeck { get; set; }
public Player Player { get; set; }
public Player Player1 { get; set; }
public bool Player1Connected { get; set; }
public bool Player1EnvironmentSetup { get; set; }
public long Player1ID { get; set; }
public int Player1Won { …Run Code Online (Sandbox Code Playgroud) 这适用于小型有效载荷.
我期待每100毫秒达到1,000,000,000.
标准的BinaryFormatter非常慢.DataContractSerializer比BinaryFormatter慢.
对于小对象,协议缓冲区(http://code.google.com/p/protobuf-net/)似乎比BinaryFormatter慢!
是否有更多的序列化机制应该关注硬核编码或开源项目?
编辑: 我在内存中序列化然后在异步套接字上通过tcp传输有效负载.在内存中生成的有效负载是具有ulong标识符的小型双数组(10到500个点).
我正在研究.NET Core项目,我正在尝试解析我List<T>的问题byte[].使用.NET Framework,我们可以通过使用来实现相同的目标BinaryFormatter,但在撰写此问题时,看起来Microsoft似乎还没有在.NET Core中支持它,并且似乎没有即将发布的版本.
任何人都可以告诉如何在.NET Core中执行此序列化?此外,依赖于二进制序列化平台,因此在.NET Core中已弃用.
我有以下代码将List序列化为字节数组,以通过Web服务进行传输。该代码在较小的实体上工作相对较快,但这是一个大约60,000个项目的列表。执行formatter.Serialize方法需要几秒钟。无论如何要加快速度?
public static byte[] ToBinary(Object objToBinary)
{
using (MemoryStream memStream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.Clone));
formatter.Serialize(memStream, objToBinary);
memStream.Seek(0, SeekOrigin.Begin);
return memStream.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud) 我将用户生成的文件从客户端发送到服务器。这些是序列化的类,然后由服务器读取。
根据我对上述链接的理解,这是危险的。但我尝试过发送一次性类,甚至尝试过实现 ISerilized 的类。但由于服务器不知道源程序集,两者都被拒绝。
[Serializable]
public class Ship : ISerializable
{
public Ship()
{
}
public Ship(SerializationInfo info, StreamingContext context)
{
Console.WriteLine("test");
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
}
}
Run Code Online (Sandbox Code Playgroud)
那么客户端如何通过这个向量成功地将代码获取到我的服务器中呢?通过伪造命名空间名称和公钥导致服务器尝试反序列化它,从而运行上面的代码?还是有更微妙的方法来做到这一点?
不幸的是,这个功能是我游戏的核心基础,所以我要小心。