Skip to main content

Multi-Threaded Data Processing

  • 2 minutes to read

Data controllers implement multi-threaded algorithms to help you fully exploit the power of modern CPUs when it comes to dealing with large amounts of data in “classic” data loading modes – when data-aware operations are performed on the client side, rather than on the server side (as in server mode). These algorithms significantly improve (two or more times faster, based on the CPU architecture) sorting, filtering, or grouping data in “classic” data loading modes.

The multi-threaded algorithms are enabled by default; however, you can always switch to use the previous version by assigning False to the dxEnableMultiThreading global constant declared within the dxThreading unit. You can also choose an algorithm version for your entire application (using the dxDefaultMultiThreadedFiltering and dxDefaultMultiThreadedSorting global constants declared within the cxCustomData unit) or select the algorithm version for individual controls.

The table below lists the DevExpress controls that support multi-threaded data processing and related options.

Control Related Options
ExpressQuantumGrid The View’s DataController.MultiThreadedOptions option set.
ExpressQuantumTreeList The tree list’s OptionsData.MultiThreadedSorting property.
ExpressVerticalGrid The vertical grid’s OptionsData.MultiThreadedFiltering property.

When implementing thread-safe TcxCustomDataSource descendants for use in provider mode, override their IsMultiThreadingSupported function to return True in order to enable support for multi-threaded data processing.

Note

We recommend that you disable the use of multi-threaded algorithms and select the previous algorithm versions only if custom filtering/sorting implementations are not thread-safe. Refer to the descriptions of the related options listed above to learn more.