优化软件性能的方法

                                        优化软件性能的方法
    刘彦清·yesky

添加较小的辅助性函数

  在最初版本的Swing工具包中,创建过多的Point、Rectangle和Dimension对象会严重地影响程序的性能。尽管一次在一个Point或Rectangle对象中返回多个值似乎更有效率,但这样作的代价要比调用多个方法高得多。在最近的Swing版本推出之前,这个问题可以通过简单地在组件或其他类中添加一些辅助性的方法得到改善,如下所示:

  public int getX() { return myBounds.x; }
  public int getY() { return myBounds.y; }
  public int getHeight() { return myBounds.height; }
  public int getWidth() { return myBounds.width; }


  现在,调用程序可以在不创建临时对象的情况下得到同样的结果,如下所示:

  int x = component.getX();
  int y = component.getY();
  int h = component.getHeight();
  int w = component.getWidth();


  原来的getBounds()仍然可以使用,较小的辅助性函数只不过提供了一种实现同样目标的效率更高的方法,其结果是,Rectangle的接口将完全暴露在组件的接口中。当修改Swing使之支持并可以使用这些较小的辅助性函数后,其结果是,Swing中的许多操作的运行速度都比原来快了二倍。由于GUI代码对性能比较敏感,这一改进的意义是重大的。

  这种技术带来的负作用是对象拥有的方法更多了,而且要获取同一种信息可以有多种方法,这就使文件变得相当大而且也更加复杂了,不利于用户采用这一技术。但是,象Swing的例子显示的那样,在对性能要求比较高的情况下,这种优化技术还是十分有效的。


可变性的利用

  除了在组件中添加象上面讨论的getX()等具有简单数据类型值的临时函数外,Java 2还使用了其他的技术来减少在AWT和Swing中的对象创建活动。在组件和其他的GUI类中添加另一种版本的getBounds(),就可以在没有创建临时对象的前提上使调用程序得到象Rectangle类型的返回值:

  public Rectangle getBounds(Rectangle returnVal) {

   returnVal.x = myBounds.x;

   returnVal.y = myBounds.y;

   returnVal.height = myBounds.height;

   returnVal.width = myBounds.width;

   return returnVal;

  }

  调用程序仍然必须创建一个Rectangle对象,不过,可以在以后的调用中重用它。如果一个调用程序反复调用许多Component对象,就可以创建一个Rectangle对象并在每个Component中使用它。需要注意的是,这一技术只适用于可变的对象类型,不可能通过这种方式减少创建String类对象。

  结合二家之长

  一个更好的解决Point等简单类的对象创建问题的方法是使得Point类成为不可变的,然后再定义一个可变的子类,具体方法如下面的例子所示:

  public class Point {

   protected int x, y;

   public Point(int x, int y) { this.x = x; this.y = y; }

   public final int getX() { return x; }

   public final int getY() { return y; }

  }

  public class MutablePoint extends Point {

   public final void setX(int x) { this.x = x; }

   public final void setY(int y) { this.y = y; }

  }

  public class Shape {

   private MutablePoint myLocation;

   public Shape(int x, int y) { myLocation = new MutablePoint(x, y); }

   public Point getLocation() { return (Point) myLocation; }

  }

  在上面的例子中,Shape可以安全地返回myLocation的地址,因为调用程序如果试图修改这些域或调用他们的"调节器"就会返回一个出错信息。当然,调用程序仍然可以将Point转换为MutablePoint,但很明显这会带来不安全性,虽然调用程序也会得到它们所需要的返回值。)C++的开发人员会注意到,这一技术与C++中的返回一个Rectangle的常量地址(const Rectangle&)有点类似━━Java不具备这样的特性。

  在Java 1.3类库中的java.math.BigInteger类中,一个类无需创建新的对象就返回一个"只读的"对象。MutableBigInteger类不是公开的,它只供java.math类库内部使用。但由于BigInteger类中的一些方法(例如gcd())是由许多的算术操作组成的,完成这些操作而无需创建临时对象将极大地改善程序的性能。

 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 是的,Nvidia Studio可以优化编程软件性能。Nvidia Studio是专门为创意专业人士和内容创作者设计的软件套件,其中包括了一些可以提升创意软件性能的工具和驱动程序。例如,Nvidia Studio驱动程序可以提供更好的图形性能,使得创意软件可以更快速地渲染和处理图像、视频和音频等内容。此外,Nvidia Studio还包括了一些优化软件性能的工具,如Nvidia Nsight、Nvidia Optix等,可以帮助开发者进行优化和调试,提升软件性能。 ### 回答2: 是的,NVIDIA Studio可以优化编程软件性能。 首先,NVIDIA Studio是NVIDIA推出的一套针对创作者和专业人士的软件和硬件生态系统,旨在提供更好的创作工作流程和性能。在编程软件方面,NVIDIA Studio提供了一系列的工具和驱动程序,可以显著提升编程软件性能。 其次,NVIDIA Studio的一项关键功能是支持GPU加速,在编程软件中可以利用GPU来加速计算和渲染任务。GPU加速能够充分利用现代GPU的并行计算能力,提供更快速、更高效的编程体验。通过NVIDIA Studio的优化,编程软件能够更好地利用GPU的计算资源,从而大幅提升性能。 此外,NVIDIA Studio还提供了与各种编程软件的兼容性和优化支持。例如,NVIDIA与各大编程软件开发商合作,对软件进行了定制和优化,确保其在NVIDIA GPU上的运行更加稳定和高效。此外,NVIDIA还提供了专门的驱动程序和插件,能够与编程软件无缝集成,进一步提升性能。 总而言之,NVIDIA Studio通过GPU加速、软件兼容性和优化等多方面的手段,可以有效地优化编程软件性能。无论是计算密集型的任务还是图形渲染,NVIDIA Studio都能提供更快速、更高效的编程体验,满足编程人员的需求。 ### 回答3: NVIDIA Studio可以提供优化编程软件性能的功能。首先,NVIDIA Studio提供了专门针对创作者和开发者的驱动程序,这些驱动程序经过优化,能够提供更快的处理速度和更稳定的性能。这些驱动程序是与NVIDIA的图形处理器 (GPU)紧密配合的,从而在编程软件的运行中提供更高的效率。 此外,NVIDIA Studio还为各种编程软件提供了专门的优化设置。其通过深入了解各种编程软件的特点和需求,为软件提供了相应的性能优化和加速技术。例如,NVIDIA Studio可能会提供特定的编码、渲染和计算功能,以提高编程软件的运行速度和效能。 除了驱动程序和优化设置,NVIDIA Studio还提供了一整套工具和技术,以帮助开发者更好地利用GPU进行编程。这些包括CUDA开发工具包、TensorFlow、PyTorch等深度学习框架的支持,以及NVIDIA编程语言和库的集成。通过这些工具和技术,开发者能够更高效地利用GPU的并行计算能力,从而加速编程软件的运行速度。 综上所述,NVIDIA Studio通过提供优化的驱动程序、特定编程软件优化设置,以及一整套工具和技术,能够帮助优化编程软件性能。这使得开发者能够更高效地开发和运行各种编程软件,从而提升工作效率和编程体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iBreathe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值