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

.net 提高应用程序性能和智能性,.net,performance,memory-management,windows-services,cpu-usage,.net,Performance,Memory Management,Windows Services,Cpu Usage,我有一个与应用程序性能和智能相关的问题 我已经创建了一个窗口服务,如果我在3台不同的配置机器上运行它的话。我希望它利用适当的机器资源(CPU和内存) 假设机器1(M1)具有单核和1GB ram Machine2(M2)有两个具有2 GB ram的内核 Machine3(M3)有4个具有4 GB ram的磁芯 现在,当我的服务在它上面运行时,它应该利用适当的资源。比如,若机器的cpu使用率为1%,那个么用户的cpu使用率应该高达50%或更多。如果已经是50%,只使用30%。拉姆也是。但千万不要超过

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

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

假设机器1(M1)具有单核和1GB ram

Machine2(M2)有两个具有2 GB ram的内核

Machine3(M3)有4个具有4 GB ram的磁芯

现在,当我的服务在它上面运行时,它应该利用适当的资源。比如,若机器的cpu使用率为1%,那个么用户的cpu使用率应该高达50%或更多。如果已经是50%,只使用30%。拉姆也是。但千万不要超过90%之类的限制

基本上,我编写了一个多线程服务,它现在不关心机器资源,并继续利用它。我想把这些情报包括进去

请帮我说说你的想法


谢谢

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

从这个角度看,CPU调度程序以毫秒级的粒度分配时隙。如果其他进程对系统的负载较低,则会给进程更多的时间。时期如果有很多进程,你会得到较少的时间段。你不应该用太多的线来敲打它

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

有了RAM,您可以做一些事情,比如,给定系统有多少空闲RAM,将算法切换到使用更少处理或更快处理,但需要更多内存的算法(反之亦然)


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

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

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

考虑以下设计准则:

  • 考虑安全性和性能。
  • 对应用程序进行逻辑分区。
  • 评估亲和力。
  • 减少往返行程。
  • 避免阻塞长时间运行的任务。
  • 使用缓存。
  • 避免不必要的例外情况。

我问这个问题是因为我的应用程序可以在任何配置机器上运行。如果它在单线程机器上运行,它将访问所有资源,例如100%和几乎70%到80%的内存。我不想那样。我想创建一个完美的资源管理器,它可以在任何类型的配置机器上运行,并且仍然可以完美地工作。您可以将线程设置为低优先级,这样只有在没有人愿意使用系统资源的情况下,它才会使用系统资源?我根本不是在玩线程预编写,只是计划线程。因为它会导致资源匮乏。我想阻止它,并手动处理它,以便我的服务在任何类型的系统配置上都能优雅地运行。您只能通过此参数调整CPU使用率。但是我认为你并不期望这是答案,所以我会在这里和你一起等待有人证明我错了:)不,我认为那是不对的。线程计数不应因系统负载而减少/增加。这样,您试图对windows调度程序撒谎,但windows调度程序非常聪明,可以找出增加或减少哪个进程是好的。如果你有一个以上的进刀,合理的做法是增加线程数。您可以在《并行编程模式》(Stephen Toub)一书中阅读更多内容。第三方物流有自动解决这个问题的结构,所以你不需要考虑这个问题。