C# 向web服务发送大量小帖子的最有效方法
我需要从C#客户端应用程序向web服务发送大约10000个小json字符串,然后将其插入数据库 我的问题:发送大量的小请求更好,还是有什么方法可以发送整个内容/多个大数据块 我试图避免这样的事情:C# 向web服务发送大量小帖子的最有效方法,c#,json,winforms,httpwebrequest,C#,Json,Winforms,Httpwebrequest,我需要从C#客户端应用程序向web服务发送大约10000个小json字符串,然后将其插入数据库 我的问题:发送大量的小请求更好,还是有什么方法可以发送整个内容/多个大数据块 我试图避免这样的事情: List<Thing> things_to_update = get_things_to_update(); // List now contains 10,000 records foreach (Thing th in things_to_update) { // POSTs
List<Thing> things_to_update = get_things_to_update(); // List now contains 10,000 records
foreach (Thing th in things_to_update)
{
// POSTs using HttpWebRequest or similar
post_to_web_service(th);
}
列出要更新的内容=获取要更新的内容()该列表现在包含10000条记录
foreach(事物更新中的事物)
{
//使用HttpWebRequest或类似工具发布
邮递网络服务(th);
}
发布整个列表
我相信C#中的字符串通常是20字节+其长度的2倍
这可能并不完全正确,但只是为了得到一个粗略的近似值:
假设您的“小”(?)json字符串大约有100个字符长,那么将产生10000个字符串对象,每个对象大约有220个字节,这将导致总大小为220000个字节,约为2MB
换句话说,不太多。我当然更希望有10000个连接到您的web服务
如果出于某种原因,2MB对于您的WS来说太多了,您可以将其拆分为几个较小的包,比如1mb或200KB等。我相信,与每次发送10000个字符串相比,您仍然可以获得更好的性能
因此,可以将字符串放在一个(或一手)数组中,然后成批发送。如果您控制服务器并可以更改代码,则最好成批发送 只需将您的对象编码为json对象并将它们放入数组中。因此,与其像这样发送数据
data={ id: 5, name: "John" }
让它成为一个数组
data=[{ id: 5, name: "John" }, { id: 6, name: "Jane" }, ...]
然后在服务器端的控制器操作中解析并插入它。您应该创建一个处理多个请求的新操作,以使代码更清晰、更易于维护
我建议将其分成1000或2000个小批量,而不是一次发送全部10000个。使用Linq轻松完成:
int batchSize = 1000;
for(int i=0; i<things_to_update.Count; i+= batchSize) {
List<Thing> batch = things_to_update.Take(batchSize).Skip(i);
post_to_web_service(batch);
}
int batchSize=1000;
对于(int i=0;i更改您的web服务,使其一次接受多个内容,并一次性发布大量数据?您为什么会担心?运行它,然后在运行缓慢时进行调整。记住,您的服务为一个服务提供多线程。10K?-想象一下每分钟有多少google
进程。如果瓶颈,可能在数据库。因此,如果需要,将消息写入队列,然后让服务按自己的速度将消息写入数据库。我不是这方面的专家,但在POST请求中可以发送的数据量是否有限制?取决于服务器和设置的限制(例如,PHP默认值为2MB,我头顶上是dunno.NET/IIS)。除此之外,除了文件系统之外,没有物理限制