大佬教程收集整理的这篇文章主要介绍了.net – Silverlight 4.0和WCF客户端代理 – 如何创建和如何关闭实例,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前在Silverlight 4.0中使用自定义二进制绑定。
在silverlight中创建代理是一个昂贵的操作吗?
我们应该尝试在代码中共享代理实例还是创建新的更好?
如果我们做共享,如果多线程访问它,我们应该锁定吗?
因为代理上的错误会错误代理的状态我认为共享代理不是一个好主意,但我读到,创作是昂贵的,所以它不是100%清楚在这里做什么。
结束 – silverlight WCF服务客户端只提供CloseAsync方法。代理需要在关闭时使用某些逻辑(如果它们出现故障,我们应该调用在Silverlight中同步的Abort(),如果不是,我们应该将CloseAsync设置为不同步或什么?
在许多官方的Silverlight样本从MS代理没有关闭,只是材料的缺陷或预期的方法吗?
主题对我非常重要,我想要清楚地了解我目前没有的所有应该考虑的事情。
(我确实看到这个问题What is the proper life-cycle of a WCF service client proxy in Silverlight 3?似乎接近我的,但我不能说我对质量的答案感到满意)
我真的想看看使用,创建,关闭等WCF代理的示例代码,最重要的是,解释为什么这是最好的方法。我也认为(目前相信),由于问题的性质,应该有一个单一的,一般使用最佳实践/模式 – 使用(创建,重用,关闭)WCF代理在Silverlight中的方法。
完整:我发现的过程的最好的完整描述是在How to: Access a Service from Silverlight.这里的例子显示了实例化Web服务客户端并允许它超出范围(不需要关闭它)的典型模式。 Web服务客户端继承自ClientBase,它具有Finalize方法,当对象被垃圾回收时,如果需要,应释放任何非托管资源。
我有一个体面的使用Web服务的经验,我使用代理和实例化它们在使用前,然后允许他们被垃圾收集。我从来没有这个方法的问题。我阅读Wenlong Dong’s Blog,其中说代理的创建是昂贵的,但即使他说性能改进了.NET 3.5(也许它已经改善了自那以后?)。我可以告诉你的是,性能是一个相对术语,除非你的数据被检索小于平凡,除了创建连接,花费在序列化/反序列化和传输更多的时间。这当然是我的经验,你最好先在这些领域进行优化。
最后,由于我认为我的意见可能不够,我写了一个快速测试。我使用Visual Web Developer 2010 Express提供的模板创建了一个启用Silverlight的Web服务(使用一个名为DoWork()的默认void方法)。然后在我的示例Silverlight客户端,我调用它使用以下代码:
int counter=0; public void test() { serviceReference1.service1Client client = new serviceReference1.service1Client(); client.DoWorkCompleted += (obj,args) => { counter++; if (counter > 9999) { for(int j=0;j<10;j++) GC.Collect(); System.Windows.messageBox.Show("Completed"); } }; client.DoWorkAsync(); }
然后我使用for(int i = 0; i <10000; i)test();并启动应用程序。它花了一点点20秒钟来加载应用程序&完成Web服务调用(全部10,000个)。当Web服务调用时,我看到进程的内存使用量跳到超过150MB,但一旦调用完成和GC.Collect()被调用,内存使用率下降到不到一半的量。远不是一个完美的测试,似乎向我确认,没有内存泄漏,或者是可忽略的(考虑到调用10,000 web服务调用可能是不常见的,所有使用单独的客户端实例)。此外,它是一个更简单的模型,比保持一个代理对象周围,不必担心它的错误,不得不重新打开它。 测试方法论:我的测试集中在2个潜在的问题。一个是内存泄漏,另一个是处理器花费在创建和销毁对象上的时间。我的建议是,可以安全地遵循提供课程的公司(Microsoft)提供的示例。如果你担心网络效率,那么你应该没有我的示例的问题,因为正确地创建/部署这些对象不会影响网络延迟。如果花费的时间的99%是网络时间,则对于1%的理论改进的优化在开发时间方面可能是浪费的(假设甚至有益处被获得,我相信我的测试清楚地表明,没有)。是的,网络呼叫是本地的,也就是说,在10,000个服务呼叫的过程中,仅花费大约20秒等待对象。这表示在创建对象时花费的每个服务调用大约2毫秒。关于需要调用Dispose,我并不意味着你不应该叫它,只是它似乎没有必要。如果你忘记了(或者只是选择不),我的测试使我相信Dispose是在这些对象的Finalize中调用。即使如此,调用Dispose自己可能会更有效,但效果仍然可以忽略不计。对于大多数软件开发,通过提出更高效的算法和数据结构,比通过解决这些问题(除非有严重的内存泄漏),您可以获得更多的收益。如果您需要更高的效率,那么也许您不应该使用Web服务,因为有比基于XML的系统更高效的数据传输选项。
以上是大佬教程为你收集整理的.net – Silverlight 4.0和WCF客户端代理 – 如何创建和如何关闭实例全部内容,希望文章能够帮你解决.net – Silverlight 4.0和WCF客户端代理 – 如何创建和如何关闭实例所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。