热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在.NET中通过线路移动对象最有效的方法是什么?-Whatmethodismostefficientatmovingobjectsacrossthewirein.NET?

IvebeenusingWebServicesatmovingdataacrossthewireandthathasservedmeprettywell.Itex

I've been using WebServices at moving data across the wire and that has served me pretty well. It excels at sending small pieces of data. As soon as you have to move deep object trees with lots of properties, the resulting XML soup takes 100k of data and turns it into a 1MB.

我一直在使用WebServices来移动数据,这对我很有帮助。它擅长发送小块数据。只要您必须移动具有大量属性的深层对象树,生成的XML汤就会获取100k的数据并将其转换为1MB。

So I've tried IIS Compression, but it left me underwhelmed. It compressed data well, but the trade off was in compression/decompression. Then I've serialized the objects via BinaryFormatter and sent that across. This was better, however, speed of encode/decode still remains.

所以我尝试过IIS压缩,但它让我不知所措。它压缩数据很好,但权衡是压缩/解压缩。然后我通过BinaryFormatter序列化对象并将其发送出去。然而,这更好,编码/解码的速度仍然存在。

Anyway, I am hearing that I am stuck in the 00s and now there are better ways to send data across the wire such as ProtocolBuffers, MessagePack, etc...

无论如何,我听说我被困在00s,现在有更好的方法通过网络发送数据,如ProtocolBuffers,MessagePack等...

Can someone tell me whether these new protocols will be better suited for sending large pieces of data and whether I am missing some other efficient ways to do this?

有人能告诉我这些新协议是否更适合发送大量数据,以及我是否缺少其他有效的方法来执行此操作?

By efficient, I mean amount of bandwidth, speed of encode/decode, speed of implementation, etc...

通过有效,我的意思是带宽量,编码/解码速度,实施速度等......

4 个解决方案

#1


11  

It depends on what's making up the bulk of your data. If you've just got lots of objects with a few fields, and it's really the cruft which is "expanding" them, then other formats like Protocol Buffers can make a huge difference. I haven't used MessagePack or Thrift, but I would expect they could have broadly similar size gains.

这取决于构成大部分数据的内容。如果你有很多带有少量字段的对象,并且它真的是“扩展”它们,那么其他格式如协议缓冲区可以产生巨大的差异。我没有使用过MessagePack或Thrift,但我希望它们的大小可以大致相同。

In terms of speed of encoding and decoding, I believe that both Marc Gravell's implementation of Protocol Buffers and my own will outperform any of the built-in serialization schemes.

在编码和解码速度方面,我相信Marc Gravell的Protocol Buffers和我自己的实现都将胜过任何内置的序列化方案。

#2


6  

This depends heavily on where your priorities lie, and what type of client you're using.

这在很大程度上取决于您的优先级所在,以及您正在使用的客户端类型。

WCF provides some great ways to push data across the wire, including many binding options as well as rather efficient serializers such as the DataContractSerializer. That being said, many of these things require a "rich" client that's also using WCF.

WCF提供了一些推送数据的好方法,包括许多绑定选项以及相当高效的序列化器,如DataContractSerializer。话虽这么说,其中许多东西都需要一个同样使用WCF的“富”客户端。

If that's not an option, then something like Protocol Buffers may be a very good approach. This provides a very fast serialization/deserialization as well as a reasonable transmission size for most data.

如果这不是一个选项,那么像协议缓冲区这样的东西可能是一个非常好的方法。这为大多数数据提供了非常快速的序列化/反序列化以及合理的传输大小。

#3


2  

Have you checked out Protobuf-net ??

你有没有检查过Protobuf-net?

#4


1  

Using Simon Hewitt's library (written in C#) to perform the serialisation it is both efficient in terms of bandwidth and speed of encoding/decoding. The library is distributed as C# source code.

使用Simon Hewitt的库(用C#编写)来执行序列化,它在带宽和编码/解码速度方面都很有效。该库作为C​​#源代码分发。

The only gotcha is to avoid .NET serialisation to kick in - for data structures not supported by the library explicit encoding must be done in client code to avoid .NET serialisation to be invoked. This affects the speed of implementation, but I got an improvement of a factor of 2-3 for the size and a factor of 20-40 times for the time taken for the serialisation.

唯一的问题是避免使用.NET序列化 - 对于库不支持的数据结构,必须在客户端代码中进行显式编码,以避免调用.NET序列化。这会影响实现的速度,但是对于大小而言,我的性能提高了2-3倍,而对于序列化,我的性能提高了20-40倍。


推荐阅读
  • 如何精通编程语言:全面指南与实用技巧
    如何精通编程语言:全面指南与实用技巧 ... [详细]
  • 在C#编程中,数值结果的格式化展示是提高代码可读性和用户体验的重要手段。本文探讨了多种格式化方法和技巧,如使用格式说明符、自定义格式字符串等,以实现对数值结果的精确控制。通过实例演示,展示了如何灵活运用这些技术来满足不同的展示需求。 ... [详细]
  • 如何使用 `org.apache.poi.openxml4j.opc.PackagePart` 类中的 `loadRelationships()` 方法及其代码示例详解 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • 深入解析C#中app.config文件的配置与修改方法
    在C#开发过程中,经常需要对系统的配置文件进行读写操作,如系统初始化参数的修改或运行时参数的更新。本文将详细介绍如何在C#中正确配置和修改app.config文件,包括其结构、常见用法以及最佳实践。此外,还将探讨exe.config文件的生成机制及其在不同环境下的应用,帮助开发者更好地管理和维护应用程序的配置信息。 ... [详细]
  • 在C#中开发MP3播放器时,我正在考虑如何高效存储元数据以便快速检索。选择合适的数据结构,如字典或数组,对于优化性能至关重要。字典能够提供快速的键值对查找,而数组则在连续存储和遍历方面表现优异。根据具体需求,合理选择数据结构将显著提升应用的响应速度和用户体验。 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • Juval Löwy主张,每个类都应被视为服务,这并非是为了让服务无处不在,而是因为微服务是经过深思熟虑后系统分解的自然结果。在他的设计和构建的系统中,这种理念有助于提高模块化、可维护性和扩展性。通过将每个类视为独立的服务,系统能够更好地应对复杂性,实现更灵活的部署和更高的性能。 ... [详细]
  • 在HTML布局中,即使将 `top: 0%` 和 `left: 0%` 设置为元素的定位属性,浏览器中仍然会出现空白填充。这个问题通常与默认的浏览器样式、盒模型或父元素的定位方式有关。为了消除这些空白,可以考虑重置浏览器的默认样式,确保父元素的定位方式正确,并检查是否有其他CSS规则影响了元素的位置。 ... [详细]
  • OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战
    OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战 ... [详细]
  • 在当前的软件开发领域,Lua 作为一种轻量级脚本语言,在 .NET 生态系统中的应用逐渐受到关注。本文探讨了 Lua 在 .NET 环境下的集成方法及其面临的挑战,包括性能优化、互操作性和生态支持等方面。尽管存在一定的技术障碍,但通过不断的学习和实践,开发者能够克服这些困难,拓展 Lua 在 .NET 中的应用场景。 ... [详细]
  • 本文深入探讨了CGLIB BeanCopier在Bean对象复制中的应用及其优化技巧。相较于Spring的BeanUtils和Apache的BeanUtils,CGLIB BeanCopier在性能上具有显著优势。通过详细分析其内部机制和使用场景,本文提供了多种优化方法,帮助开发者在实际项目中更高效地利用这一工具。此外,文章还讨论了CGLIB BeanCopier在复杂对象结构和大规模数据处理中的表现,为读者提供了实用的参考和建议。 ... [详细]
author-avatar
我是黄小果1960
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有