5

我有一个与应用程序性能和智能有关的问题。

如果我在 3 台不同的配置机器上运行它,我已经创建了一个窗口服务。我希望它利用适当的机器资源(CPU 和内存)。

假设机器 1(M1) 具有单核和 1 GB 内存。

Machine2 (M2) 有两个内核和 2 GB 内存。

Machine3 (M3) 有 4 个内核和 4 GB 内存。

现在,当我的服务在其上运行时,它应该利用适当的资源。就像机器的 cpu 使用率是 1% 一样,它应该让用户达到 50% 或更多。如果已经是 50%,则只使用 30%。公羊也是如此。但永远不要超过 90% 之类的限制。

基本上我写了一个多线程服务,它现在不关心机器资源并继续使用它。我想将这种智能包含在其中。

请帮我谈谈你的想法。

谢谢

4

2 回答 2

4

正如 Archeg 所说,根据处理器的数量,您可以增加线程数。但是根据 CPU 活动增加线程数是错误的方法。

以这种方式看待它 - CPU 调度程序以毫秒为粒度分配时隙。如果其他进程对系统的负载较低,它将给您的进程更多时间。时期。如果有很多进程,您将获得较少的时隙。你不应该用比必要的更多的线程来处理它。

你需要做的是决定想做什么。服务对时间敏感吗?如果是这样,那么在负载较重的系统中,您可以使用更少的 CPU 时间进行操作,而在空闲系统中,您可以在相同的时间内使用更多的 CPU 时间,比如一秒钟。注意:如果您的服务执行 I/O,则您的服务本身可能会限制它可以使用多少 CPU。

使用 RAM,您可以执行类似的操作,考虑到系统有多少可用 RAM,将算法切换到使用较少处理或处理速度更快但需要更多内存的算法(反之亦然)。

关键是除了更好的调度器(这是许多聪明人多年来一直在关注的东西)之外,没有“独立于服务”的方式来进行这种智能扩展。但是,您可以编写了解当前系统约束并相应更改行为的服务。

于 2012-04-19T19:55:34.370 回答
2

如果您在设计时考虑到了性能,那么构建高性能 .NET 应用程序会容易得多。确保从项目一开始就制定绩效计划。永远不要尝试将性能添加为构建后的步骤。此外,使用包含迭代之间不断测量的迭代开发过程。

通过遵循最佳实践设计指南,您可以显着增加创建高性能应用程序的机会。

考虑以下设计指南:

  • 考虑安全性和性能。
  • 对您的应用程序进行逻辑分区。
  • 评估亲和力。
  • 减少往返。
  • 避免阻塞长时间运行的任务。
  • 使用缓存。
  • 避免不必要的异常。
于 2012-04-25T05:59:28.813 回答