.net - 提高应用程序性能和智能

标签 .net performance memory-management windows-services cpu-usage

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

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

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

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

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

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

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

请帮我解决你的想法。

谢谢

最佳答案

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

这样看 - CPU 调度程序以毫秒的粒度分配时隙。如果其他进程对系统的负载较低,则会为您的进程提供更多时间。时期。如果有很多进程,您将获得较少的时间段。你不应该用超过必要的线程来处理它。

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

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

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

关于.net - 提高应用程序性能和智能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10085641/

相关文章:

c# - C#/.NET 的解析器生成器

PHP 长轮询 - "long"应该有多长?

c# 如何更快地运行应用程序

c++ - 为什么用 C 复制文件比 C++ 快得多?

Xcode 中的 iOS 应用程序内存使用量不断上升

c++ - 已释放的堆未被回收?

java - 为什么在服务器端使用 .NET 和 Java?

c# - 如何在 C# 中获取 TPL 任务线程的引用?

c# - 在数据中用逗号解析 CSV

c++ - 通过指针 vector 删除指针