# 应用设计

下表总结了可能产生更快运行时性能的应用程序设计特征。提高性能的应用程序设计选择通常对系统行为的影响最小。

设计模式 | 为什么更快 | 最有价值选项 | 注意...
--- | --- | --- | ---
每个流使用少量工具。 | 根据工具返回的信息量，单个 ViDi 工具的处理时间不会出现明显变化。 例如，经过训练以找到 100 个不同特征的单个蓝色工具以与训练仅查找单个特征的工具相同的速度运行。此外，返回的特征数量仅产生最小的速度差异。 类似地，红色工具以相同的速度运行，而与它找到多少缺陷无关，并且绿色工具可以以相同的速度分为 2 个类或 2000 个类。 | 使用单个工具开始构建应用。 |
避免图像转换。 | 在工具操作期间，必须对图像进行采样来供神经网络处理。此采样需要栅格（未压缩）格式图像，例如位图。执行此转换需要时间。 类似地，如果将工具配置为使用单通道（灰度）图像作为输入，但提供的图像是多通道彩色图像，则必须在运行时为每个图像计算亮度值。 | 尝试使用单通道灰度图像解决您的应用。 | 某些应用需要颜色信息。
减少处理数据量。 | 执行以下操作可减少处理数据的数量： 使用较小的 ROI 使用遮蔽 使用尽可能少的图像通道 这些有助于通过减少要处理的数据总量来提高处理速度。 | 限制 ROI。 | Cognex ViDi Suite 工具需要背景信息才能正常工作，因此尽量不要过多限制 ROI。 通常不需要下采样（通过样本密度参数设置）。选择更大的特征尺寸，可以提高速度并且无需对运行时进行下采样。
使用多线程 | 在具有多个 GPU 的系统上，同时处理多个流可以并行执行工具，从而提高吞吐量。 在单 GPU 系统上，可以将系统配置为允许多个进程使用同一个 GPU。这样可以提高 GPU 占用率，并且可以提高吞吐量，但工具执行时间将增加。 | 使用 --max-process-count 命令行参数，实现多线程访问单个 GPU。 使用本地控件为运行时应用启用多进程 GPU 访问 GlobalConfig() 方法：
    control.GlobalConfig("max_process_count=2");
| 单个工具的处理时间将增加。
C ++（非托管） | 使用非托管语言环境可以缩短系统活动对工具执行的影响。 | 对于低延迟，高性能的应用，请不要使用 Cognex Designer。 | Windows 不是实时操作系统 (RTOS)。