Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向web服务发送大量小帖子的最有效方法_C#_Json_Winforms_Httpwebrequest - Fatal编程技术网

C# 向web服务发送大量小帖子的最有效方法

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

我需要从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 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)。除此之外,除了文件系统之外,没有物理限制