c# - 使用线程通过 API 为数千用户导入数据

标签 c# .net windows-services import paypal

在我们的应用程序中,我们需要通过 API 为我的应用程序的用户从 paypal 导入交易数据并将其存储在数据库中。我有数千名(现在大约 5000 名)用户,而且还在日益增加。

此应用程序是一个 .net windows 服务。

这会按小时为所有用户导入数据。目前我们正在一个接一个地为用户导入数据,但有时一个用户数据可能非常大,需要大约 5 小时才能获取他的全部数据,因此我们会阻止其他用户,直到该用户数据导入完成。这对所有其他用户的每小时导入完全没有折腾。

为了避免这种情况,我们考虑为每个用户导入创建线程,并使用 Windows 服务每小时运行一次。在这种情况下,我们需要考虑任何时间点的带宽,因为所有线程都将同时启动。这是一个问题吗?

现在,我想知道我们的新实现方式是否正确?另外我想知道它通常是如何完成的?如果有人遇到过这种功能,请告诉我们它是如何完成的。

如果我的问题不够清楚,请告诉我,我会提供更多信息。

编辑:如果我从一个 IP 向 Paypal 发送这么多请求,它如何处理?知道它是否限制了每个 IP 的请求吗?

更新:感谢所有的建议和反馈。

我想到了使用 jgauffin 的解决方案,因为它是 ThreadPool 的完美模仿。但是在这里我需要一些更多的特性,比如动态改变线程限制和回调方法的递归调用。

经过大量研究和分析线程池,我决定使用 SmartThreadPool它基于线程池逻辑制作,但具有更多功能。它非常好,完全符合我的目的。

最佳答案

不要为每个用户使用一个线程。为每个用户在线程池中放置一个 WORK ITEM。通过这种方式,您可以两全其美 - 无需 5000 个线程的内存开销,以及更多的负载控制,因为您可以确定 ThreadPool 使用多少线程来处理工作项。

关于c# - 使用线程通过 API 为数千用户导入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3707787/

相关文章:

.net - Windows 服务中的 "net use"命令

c# - 在运行时更改 PropertyGrid Description 和 Category 属性

sql - 控制windows服务的启动顺序

c# - 如何制作安全的登录页面、搜索功能

.net - 紧凑型框架最佳实践 : Building a GUI

c# - C++/命令行界面 : Implementing an abstract C# class that implements INotifyPropertyChanged results in C++ compiler error C3766

.net - 不使用 SMO 执行 TSQL?

c# - VS 2008 Windows 服务安装程序不工作

c# - WPF TextBlock 绑定(bind)到字符串

c# - 正确实现单元测试