相关疑难解决方法(0)

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

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

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

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

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

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

.net c# compression serialization

15
推荐指数
2
解决办法
842
查看次数

如何使用.NET在Azure上实现高性能REST API?

我们在Windows Azure上托管了.NET Web角色,仅使用少量Web方法提供REST API.

其他云托管应用程序(而非浏览器)使用API​​相当积极.每种方法都是无状态的,可以直接扩展,并且通常与Blob或表存储交互.

然后,与大多数传统API相反,上传到API数据通常比从API 下载的数据大得多.然后,平均消息的大小通常也很大(即超过100kB).

到目前为止,我们在带有POX消息的ASP.NET Forms上使用WCF(Plain Old Xml).前端性能不是很好,罪魁祸首是:

  • XML是详细的==>带宽限制.
  • ASP.NET + WCF + WcfRestContrib缓慢解析/序列化消息==> CPU限制.

我想知道什么是实现最高前端性能的最佳策略,以减少支持工作负载所需的VM数量.

我正在考虑的可能策略:

  • 丢弃XML以支持ProtoBuf.
  • 添加上游 GZip压缩(经典HTTP压缩仅适用于下游).
  • 完全放弃WCF以支持原始HttpHandler.

是否有人对各种替代方案进行了基准测试,以实现每个Azure VM的大部分用途?

Ps:隐含地引用Lokad Forecasting API,但试图以更一般的方式表达问题.

api rest performance azure

13
推荐指数
1
解决办法
3903
查看次数

我还应该在.NET 4.0中使用BinaryFormatter进行简单序列化吗?

我正在开发一个主从式应用程序.主应用程序将状态数据发送到从属设备以处理并以某种恒定速率显示.状态数据被包装到包含许多字段的单个类中.这些字段类型包括基元,类,接口,接口列表等.所有类型都是BCL或自定义类型,因此可以根据需要修改自定义类型.主应用程序和从属应用程序都是.NET 4.0.我不关心序列化版本控制,因为主应用程序和从属应用程序将作为一对交付.

我需要一种"快速"的方法来序列化主服务器上的状态数据并在服务器上反序列化它.当我说"快"时,我更谈论开发时间(但如果解决方案很糟糕,处理时间可能是一个因素).但是,主设备和从设备将分布在WAN上,因此某种程度的紧凑性也会很好.

为了快速解决方案,我目前正在考虑简单地使用BinaryFormatter然后压缩流GZipStream.这是.NET 4.0的方法吗?

.net c# performance serialization binary-serialization

8
推荐指数
1
解决办法
1555
查看次数

ProtoBuf-net序列化IEnumerable <T>

我正在尝试在我的项目中使用ProtoBuf-NET(它主要是Silverlight 4项目).

我在序列化我的模型集合时遇到了困难,它们都是这样定义的:

private List<T> _itemsSet;
public IEnumerable<T> TSet
{
    get {return _itemsSet;}
    set {_itemsSet = value == null ? new List<T>() : new List<T>(value);}
}
public void AddT(T item)
{
    //Do my logic here
    _itemsSet.Add(item);
}
Run Code Online (Sandbox Code Playgroud)

更新:首先我不能序列化它 - No serializer defined for type: System.Collections.Generic.IEnumerable1 [MyType]`.其次,我认为我将无法根据手动和protobuf-net源代码分析来绝对它.

  1. 有没有办法扩展protobuf-net以将代理提供给ProtoMemeber属性中的外部Add方法?
  2. 为什么使用ProtoMember(1, OverwriteList=true)不起作用?它不是要覆盖收集而不应该关心Add<T>()方法吗?为什么它只是不尝试将此属性设置为T [] List<T>或任何可分配的设置IEnumerable<T>
  3. 有没有办法提供自定义反射机制来处理Silverlight中的私有字段,例如:实现:public interface IReflectable{ object GetValue(FieldInfo field); void SetValue(FieldInfo field, object value); }使用私有字段.我使用这种方法与Db4o的私有字段一起工作:http://community.versant.com/Forums/tabid/98/aft/10881/Default.aspx
  4. 除了创建继承之外,我有哪些选择MyTypeCollection<T> : …

c# silverlight protobuf-net

7
推荐指数
1
解决办法
3608
查看次数