1

我正在做一个需要与 20 个小型计算机板通信的项目。我将需要检查他们的连接,他们还会向我返回一些数据。所以我的目标是为这些板建立一个控制/监控系统。

我将使用 Visual Studio 2010 和 C# WPF。

我的想法/计划是这样的:

在主线程上:

  • 控制窗口只有一个,所以会创建一个主线程,主要是更新要显示的数据。每块板的数据会以1s的时间间隔显示和刷新。数据源将来自主线程将查找最新数据的数据库(我还没有决定使用哪种数据库)。

  • 控制窗口上也会有控制按钮。我已经有一个 .dll 库,所以我只需要调用里面的函数来指导板子采取行动(通过启动另一个线程)。

将有两种服务:

  • (定时器服务)一个是预定的定时器,用于在特定时间打开/关闭电路板。用户将能够更改开/关时间。它将从数据库中读取以获取开/关时间。

  • (连接服务)另一位负责每隔 30 秒或更短时间从董事会询问和接收信息/状态。工作包括通过互联网与板子连接,请求数据,接收数据,然后将数据写入数据库。如果互联网连接失败,还写下抛出的异常。

我的问题:

1)对于连接服务,我想知道我是否应该启动 20 个线程来执行此操作,每个连接到板一个线程。因为如果仅由一个线程进行连接,则下一个板连接必须等待第一个连接完成,这可能会增加 1-2 分钟才能结束整个过程。所以我需要大约 20 - 40 分钟才能取回所有数据。但是如果我将连接分离到 20 个线程,会不会对性能产生很大影响?由于 20 个线程永远不会死掉,它会尽可能每 30 秒请求一次数据。此外,这是否意味着我必须拥有 20 个数据库,因为如果同时写入 20 个线程,它会与数据库发生冲突?

2)为了每1秒更新一次主线程上的数据显示,我是否也应该启动一个服务来做到这一点?并且由于连接服务也在访问同一个数据库,这会与数据库发生冲突吗?

未来将有100多个板进行控制和监控,所以我想让程序尽可能轻。

非常感谢!非常感谢评论和想法!

4

2 回答 2

1
  1. 开始 20 个线程将是最好的选择。(或者正如拉尔夫所说,在需要时使用线程,在您的特定情况下,它可能在某个时候是 20)。大多数数据库都是线程安全的,这意味着您可以从单独的线程中写入它们。如果您使用“真实”数据库,这根本不是问题。
  2. 不,在主线程上使用 Timer 来更新你的 UI。UI 可以很容易地从数据库中读取。只要更新动作本身不占用太多时间,在 UI 线程上执行就可以了。
于 2013-11-15T07:59:04.587 回答
0

1)为什么不在需要时使用线程。您可以使用他们构建的一个 DBMS 来处理大量信息。

2)不确定为 UI 线程启动服务是什么意思。与 1) 数据库管理系统是为处理数据而构建的。

于 2013-11-15T07:57:30.627 回答