我有一个与应用程序性能和智能相关的问题。
如果我在3台不同的配置机器上运行它,我已经创建了一个窗口服务。我希望它利用适当的机器资源(CPU和内存)。
Say Machine 1(M1)具有单核,1 GB RAM。
Machine2(M2)有两个内核,2 GB内存。
Machine3(M3)有4个内核,4 GB内存。
现在当我的服务运行时,它应该使用适当的资源。就像cpu使用机器是1%一样,用户应该高达50%或更多。如果它已经50%只使用30%。 ram也是如此。但永远不要超过90%的限制。
基本上我写了一个多线程服务,它现在不关心机器资源并继续使用它。我想在其中加入这种情报。
请帮助我解决你的想法。
由于
答案 0 :(得分:4)
正如Archeg所说,根据处理器的数量,您可以增加线程数。但是,基于CPU活动增加线程数是错误的方法。
以这种方式查看 - CPU调度程序以毫秒粒度分配时隙。如果来自其他进程的系统负载较低,则将为您的进程提供更多时间。期间。如果有很多流程,您将获得更少的时间。你不应该用超过必要的线程来鞭打它。
您需要做的是决定您想要做什么。服务时间敏感吗?如果是这样,那么在负载很重的系统中,您可以使用较少的CPU时间,而在空闲系统中,您可以在相同的时间内使用更多的CPU时间,比如秒。 注意:如果您的服务执行I / O,那么您的服务本身可能会限制它可以使用多少CPU。
使用RAM,你可以做一些事情,考虑到系统有多少可用RAM,将算法切换到使用较少处理或处理速度较快但需要更多内存(反之亦然)的算法。
重点是,没有与服务无关的'这种智能扩展的方法,除了更好的调度程序(这是许多聪明人多年来一直在关注的东西)。但是,您可以编写了解当前系统约束并相应更改行为的服务。
答案 1 :(得分:2)
如果您在设计时考虑到性能,那么构建高性能.NET应用程序会非常容易。确保从项目一开始就制定绩效计划。永远不要尝试将性能添加为构建后步骤。此外,使用迭代开发过程,其中包含迭代之间的不断测量。
通过遵循最佳实践设计指南,您可以显着提高创建高性能应用程序的机会。
请考虑以下设计指南: