Отображение памяти c ++ char *** в DataTable или DataGridView в C #

Я работал над программой, которая отображает DataTable в DataGridView в моем приложении на C #. C ++ намного быстрее обрабатывает сравнения строк, поэтому я работаю над решением, которое требует, чтобы оба работали в основном с 1 DataTable.

Мой код на C ++ — это в основном DLL с функциями сравнения строк. Теоретически я мог бы разместить данные в массиве типа Vector>, и у меня действительно есть char *** myArray, в котором есть все указатели для каждой строки.

Мой вопрос в основном таков: как быстрее всего отобразить большую матрицу данных, которая размещена в памяти C ++? Если бы я мог как-то создать DataTable или связать свой DataGridView с местами памяти в myArray ***, это было бы феноменально.

До сих пор я пробовал несколько вещей, как попытку ускорить все это, и лучшее, что я придумал прямо сейчас, это: C ++ загружает данные, а когда C ++ вносит изменения, он сохраняет их в .csv. CSV сопоставляется в C # с DataTable с помощью ADO Jet 4.0. Это работает довольно хорошо, загрузка полной информации, когда 150k + строк с 50 столбцами в C ++, занимает пару минут, но для повторного экспорта в .csv требуется всего 20 секунд. C # загружает это очень быстро, так как использует ADO, однако, когда я делаю изменения в C ++, C # не отображает это, пока не будет выполнен весь набор изменений. Иногда внесенные изменения могут занимать пару минут, поэтому я застреваю с представлением индикатора прогресса снова и снова.

Я также попытался сделать это с SQL, который работал немного быстрее в целом, но не очень. Другая основная причина, по которой я избегаю этого, заключается в том, что программное обеспечение будет работать на машинах, на которых не всегда имеется доступная база данных SQL.

Я также попытался выполнить маршаллинг и фактически получил его, чтобы можно было передать весь DataTable из C # в C ++, но для перехода из C # в C ++ и загрузки в C ++ потребовалось около 20 минут. Этот процесс мог бы быть улучшен, но просто сбор всего DataTable занял достаточно много времени, на мой взгляд, это был не приличный подход.

Итак, еще раз, я думаю, что данные уже находятся в памяти, созданной C ++, поэтому, если бы я мог просто перенаправить начальный адрес из myArray *** в C # и заставить его соответствующим образом обновить DataTable, что представляется мне лучшим подходом из, но мне любопытно, что вы думаете, это лучший подход?

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]