c++ - 在保持良好的面向对象设计的同时重用代码以提高性能的最佳方法是什么?

标签 c++ performance optimization

我正在开发一个科学程序,其中有几个耗时 从不同的其他函数调用的函数。我要优化 这些调用通过避免多次调用具有相同参数的相同函数来实现 一次不破坏 OO 概念,例如封装。

我试图制定一个我所拥有的基本示例。 A类有一个对象 B 类,我从中计算 A 类函数所需的中间结果。 例如,为了让 functionA 和 functionB 计算其结果, 每个函数都需要在 B 的对象上调用 time_consuming_function。 通常这个函数是从一个循环中调用的,所以参数(1 和 2) functionA 和 functionB 的调用相同。

class ClassA {
  ClassB obj // member object

  return_type functionA(parameter1, parameter2) {
    value1 = obj.time_consuming_function(parameter1)
    value2 = obj.time_consuming_function(parameter2)

    return some_operation_with(value1, value2)
  }

  return_type functionB(parameter1, parameter2) {
    value1 = obj.time_consuming_function(parameter1)
    value2 = obj.time_consuming_function(parameter2)

    return some_operation_with(value1, value2)
  }
}

一个解决方案是创建一个结构来保存计算值 调用 ClassA 函数,例如这个例子:

class ClassA {
  ClassB obj // member object

  return_type functionA(data) { // data is a structure to hold the values
    if (data.is_empty()) {
      data.value1 = obj.time_consuming_function(parameter1)
      data.value2 = obj.time_consuming_function(parameter2)
    }

    return some_operation_with(data.value1, data.value2)
  }

  return_type functionB(data) { // same data obj as before

    // this time data is not empty, so no calculation needed
    if (data.is_empty()) {
      data.value1 = obj.time_consuming_function(parameter1)
      data.value2 = obj.time_consuming_function(parameter2)
    }

    return some_operation_with(data.value1, data.value2)
  }
}

另一种解决方案是创建一个 Data 类来预先保存数据。 在这种情况下,有了参数 1 和 2,我将更新所有属性 在类 Data 上使用此参数进行更改,并在执行我的函数时从 A 类我只需要使用之前计算的值。类 A 将提供数据类的接口(interface)。

class Data {
  ClassA class_a_obj

  void update_values_that_depend_on_parameter1(class_a_obj, parameter1) {
    value1 = class_a_obj.time_consuming_function(parameter1)
  }

  void update_values_that_depend_on_parameter2(parameter2) {
    value2 = class_a_obj.time_consuming_function(parameter2)
  }
}

class ClassA {
  ClassB obj // member object

  return_type functionA(data) {
    return some_operation_with(data.value1, data.value2)
  }

  return_type functionB(data) { // same data obj as before

    return some_operation_with(data.value1, data.value2)
  }

  return_type time_consuming_function(parameter) {
    return obj.time_consuming_function(parameter)
  }
}

我想知道您对这个问题的看法以及建议的解决方案。 还有其他合适且有效的解决方案吗?

长话短说:

我有一个程序可以进行多次计算,每一次计算 调用函数来获取中间值。这些值在以下情况下相同 从接收相同参数的函数中调用,我正在寻找一种方法 重用这些中间值来优化这些调用。

在保持良好对象的同时重用这些值的最佳方法是什么 面向设计??

最佳答案

通过缓存最近结果并返回缓存结果的代理封装对这些方法/对象的访问。

关于c++ - 在保持良好的面向对象设计的同时重用代码以提高性能的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31000310/

相关文章:

c++ - 如何处理代码中的优化

c++ - 如何从二维数组构建对象的 std::vector

c++ - std::thread --- 没有匹配的构造函数

c++ - 具有未使用模板参数的函数模板

java - Java 中 Public 与 Private 的运行时性能

c# - 改进代码 : Compare 2 list of elements

c++ - 从 const_cast 中取消引用指针是否总是会调用未定义的行为?

php - PHP7+ 中的标准类与匿名类

javascript - 反墨迹

python - 使用自定义函数创建 n*n DataFrame