Effective C# Item34:创建大粒度的Web API
当我们使用Web Service或者.NET Remoting时,需要谨记当在本地和远程机器之间传输对象时,传输过程的成本是很大的,对于某些只是简单重现包装本地接口的操作,我们不应该将它们用作远程API,这么做并不会出错,只是效率比较低。
我们的Web接口应该主要在客户机和服务器之间传输序列化文档或者对象集合。客户机首先进行逻辑处理,准备数据,这个过程是不需要和服务器进行通信的,当客户端把数据准备好后,再将整个文档发送给服务器端;服务器端的处理也是一样的,当服务器把文档中的所有内容处理完毕后,再将其返回给客户端。
对于一些本地操作时间很长、更新不频繁的数据来说,我们可以使用Visitor模式,首先每个客户端都从服务器端获取所有必要的数据,同时将自己的信息保存在服务器中,然后客户端可以一直在本地进行操作,当有数据上传到服务器时,服务器对更新后的数据进行分发,通知所有相关的客户机,数据已更新。这样一方面可以提高客户端的工作效率,不用频繁的和服务器进行通信,另一方面,可以保证客户在处理的数据是当前服务器中的最新数据。
我们希望客户端和服务器端之间通信的频率和负荷都能降到最低,但是这两个目标是矛盾的,我们需要在两者之间寻找平衡,平衡的结果是应该接近两个极限的中间,而不是偏向任何一方。
作者:李潘
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通