提高应用程序性能和智能

时间:2012-04-10 08:47:59

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

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

如果我在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%的限制。

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

请帮助我解决你的想法。

由于

2 个答案:

答案 0 :(得分:4)

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

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

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

使用RAM,你可以做一些事情,考虑到系统有多少可用RAM,将算法切换到使用较少处理或处理速度较快但需要更多内存(反之亦然)的算法。

重点是,没有与服务无关的'这种智能扩展的方法,除了更好的调度程序(这是许多聪明人多年来一直在关注的东西)。但是,您可以编写了解当前系统约束并相应更改行为的服务。

答案 1 :(得分:2)

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

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

 请考虑以下设计指南:

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