不知道楼主是怎么用的,一般来讲性能瓶颈在数据库上,而不在网络传输上,追求 WCF 的性能似乎意义不大
解决方案 »
- 怎么用axRealAudio控件?
- C#中同名类问题
- C#中 bs与cs如何交互,如何用程序实现(除了数据库和中间件 外)
- 关于swf在页面缓存
- 求助,很奇怪的问题,各位帮忙看看
- 请问怎么得到FlexGrid的当前行啊?
- 几个问题
- WPF,一直不清楚这是什么语法
- 请各位帮忙啦!!!关于DataSet的问题!!!
- 为什么我把DataGrid中的Autogeneratecolumn设为false后不能触发SortCommand事件和PageIndexChanged事件
- VS2008 的窗体文件拷贝到VS2010后出现resx文件无法加载类型的问题
- 我尽量去把自己所遇到的问题表达清楚,不然大神们都不知道我在说什么.
一般使用wcf是广域网。
wcf是网络拥堵的时候,效果真的不是很好。
wcf没有深入研究。自己做的wince上的程序比较多。所以自己写了一套通信协议。
http://www.cnblogs.com/dataexcel/archive/2012/12/09/2809045.html
在EAI中项目中使用WCF, 才可以更好更全面的诠释WCF的优雅.
WCF不开源和限制多是它的失败支出,设计思路很好,但是就算使用自定义绑定,能做到的也很有限,所以说那个只能用来学习,大项目要使用的话,得考虑折衷方法(自己处理序列化过程,返回stream)。顺便补充下,其实WCF的那个序列化还有个问题,在对Dictionary进行Json序列化时,返回的格式很不爽:
[{"Key":"ID","Value":1},{"Key":"Text","Value:"gg"}]
别说看起来不爽,用起来也不方便,明明那个Key是不可能重复的,而且.NET里面不可为空(Java中可以为空),那么不是可以作为匿名类型的属性来处理吗:
{"ID":1,"Text":"gg"}
而第三方的Json序列化类对于匿名类型的序列化和反序列化,就自动映射到这样的一个Dictionary<string,string>类型上的,因此替换WCF自带的序列化类是非常有意义的。
如果以后还需要用到wcf,还得好好研究研究
Type type, XmlDictionaryString name, XmlDictionaryString ns,
IList<Type> knownTypes)
{
return new NetDataContractSerializer(name, ns);
}
要将默认的序列化替换掉,还必须返回XmlObjectSerializer的派生类,这下我彻底理解那个DataContractSerializer或DataContractJsonSerializer的使命了,与其说是序列化类,不如说是格式化类,将已经序列化到xml格式Message对象,格式化到指定类型上,从而导致了无法使用第三方快速序列化类进行替换,更不能直接实现边序列化边传递消息,因为消息本身就是已经序列化好了的。
微软在WCF编程规范中,限制死了序列化过程,只能让你改变序列化的格式Formatter,而不能直接替换序列化行为。Gzip压缩也是在格式化消息的过程中进行干预而已。微软只考虑了规范,没考虑性能,开放的自定义绑定必须遵循规范使用,无法使用Emit进行最高速度优化。.NET4.0一开始的性能迟问题导致发布延也是一个例子。总结:C#语言本身是高效率的,但是微软的的框架却让它工作在低效率下面了,还不让别人去从根本优化它(不开源),所以我们可以学习微软的框架,实际使用就需要打上个问号。看似非常好用的内置类,反编译下看看实际是如何实现的,效率如何?只求稳定而不考虑效率的,就没必要看它的实现,微软的框架的稳定性的确是考虑的最好的。最后推荐下一款国外著名的开源框架,对于性能追求者是个福音。其性能和灵活度都非常高,采用了Java中广泛使用的IOC思想,是替代WCF的最佳选择。(把Java的优秀思想拿来为.NET服务,又不失.NET的高效性)
无法想象用 WCF 发送100W行数据,如果楼主写了这样的代码,那很明显不是 WCF 的性能问题,而是使用不当的问题。DataContractSerializer 在控制 xml 格式方面提供的选项非常少,这是有意为之的,目的是将程序员的注意力拉回到数据契约的业务含义上,而不是物理表示上。如果很关心传输的格式,或者有大量数据要传递,那么 WCF 可能不合适。在思考怎么使用 WCF 传输几百 M 的数据时,请记住 WCF 采用的是契约优先开发方式,目的是简化跨进程跨平台调用,它不是 FTP 的替代品。
最近正在学习socket,楼主能提供点资料吗
http://bbs.csdn.net/topics/390408695
当然,对于ADSL来说,需要数据库信息交换的时候,50K上传显然不够,必须考虑压缩数据量。不然别说10W了,1W就可以崩溃。
场景二:并发数100的情况并不少见。如果没个请求返回1000左右的数据条数,那么10W就有了,如果数据提及是100M那么光网络上传输都要几分钟时间,但是如果数据量压缩到原来的1/10,那就只要几十秒时间,大大提高了数据响应速度和降低并发冲突。