3

如果有人在优化代码、实现的清晰性、效率和可移植性方面证明他们的设计权衡是合理的,人们如何选择?

这个问题的相关示例可能是大文件处理,其中“大文件”是“相当几 GB”的问题,可以使用随机访问方法进行简化。

读取和修改此文件的方法可能是:

  1. 无论如何都要使用流,并寻找所需的位置 - 这是可移植的,但可能很慢,并且不清楚 - 这几乎适用于所有操作系统。
  2. 将文件的相关部分映射为一个大块。例如,为每个块映射一个 50MB 的文件块进行处理 - 这适用于许多操作系统,具体取决于为该系统实现 mmap 的细微之处。
  3. 只需 mmap 整个文件 - 这需要 64 位操作系统,是实现此功能的最有效和最清晰的方法,但不适用于 32 位操作系统。
4

5 回答 5

4

不确定您要问什么,但设计过程的一部分是分析对可移植性和性能(以及其他因素)的要求。

如果您知道永远不需要移植代码,并且绝对需要最佳性能,那么您可以相应地调整您的实现。仅仅为了便携而便携是没有意义的。

另请注意,如果您想要性能和可移植性,那么没有什么能阻止您为每个平台提供实现。当然,这会增加您的成本,所以实际上,这取决于您优先考虑您的需求。

于 2009-06-23T23:24:44.113 回答
2

基本上,您需要在编码之前先考虑一下。每个项目都是独一无二的,对需求的分析可以帮助决定什么是最重要的。对于任何项目来说,什么是最好的解决方案取决于几件事......

首先,这个项目是否需要或最终是多平台的?根据您的选择,选择正确的编程语言应该更容易。然后你也可以在你的项目中使用不止一种语言,这是完全正常的。可移植性并不一定意味着较低的性能。这意味着要实现目标需要付出更多的努力,因为您需要高质量的代码。此外,每种编程语言都有自己的哲学。了解它们是什么。有一件事是肯定的,某些问题经常反复出现。这就是为什么了解不同的设计模式有时会有所作为,但有些语言有自己的习语,在选择语言时可能非常相关。需要考虑的另一件事是您可以为您的项目采用的不同方法。多线程、套接字、客户端/服务器系统和许多其他技术都可供您使用。选择正确的技术有助于使项目变得更好。

了解需求和当今可用的不同解决方案将有助于决定何时选择不同的权衡。

于 2009-06-24T05:48:11.603 回答
2

没有约束,这个问题就无法理性地回答。

你问“什么是最好的颜色”,却没有告诉我们你是在画房子、汽车还是图片。

约束至少包括

  • 选择的语言
  • 目标平台(多 CPU 工业级服务器还是 iPhone?)
  • 针对速度内存进行优化
  • 成本(谁在为此提供资金,是否存在交付限制?)

任何软件都不可能具有“终极”可移植性。

WideFinder项目就是使用多种方法处理此类问题的一个示例,但对所需的特定输入/输出和“最佳”测量都有严格的限制。

于 2009-06-23T23:22:41.370 回答
1

这实际上取决于项目的驱动程序。如果你在做内部企业开发,那么做最简单的事情,可以在你的目标硬件上工作。根据需要对性能要求进行修改。

如果您在第一天就知道需要支持不同的硬件平台,那么您显然需要选择可移植的实现,或者使用多种方法。

于 2009-06-23T23:26:08.260 回答
0

出于可移植性的考虑,可移植性从一开始就成为 Java 的营销策略,并且按照惯例对于 C 来说是生活中的一个事实,我相信大多数遵守 Java 或 C 的“成长”的人都会这么说。

然而,绝对可移植性仅适用于最微不足道到大多数中等复杂性的应用程序——任何具有高复杂性的应用程序都需要专门的调整。

于 2009-07-10T03:05:17.140 回答