Вопрос

Наша основная программа написана на java , но код, который извлекает наши данные из хранилища, написан на C.Мне нужно создать файл HDF5 из извлеченных данных.Было бы лучше использовать JNI для вызова C-кода для получения данных, а затем создать файл HDF5 из Java или создать HDF5 из C-кода?

У меня мало опыта работы с JNI или C.

Также одним из наших главных критериев является производительность.Насколько сильно снижается производительность при использовании JNI?

Это было полезно?

Решение

Граница вызова функции "медленная", поэтому, если вы выполняете много вызовов вашей собственной подпрограммы, производительность будет снижаться.

Пример того рода вещей , которые мочь извлеките выгоду из перехода на JNI (я подчеркиваю мочь, поскольку Java более чем достаточно быстра для многих целей) было бы обычной процедурой для выполнения какой-либо обработки изображений на большом растровом изображении.Но чтобы вызвать процедуру JNI для каждого пиксель было бы намного, намного медленнее, чем делать это в цикле на чистой Java.

Извлечение данных из одного формата в другой - это, откровенно говоря, то, что лучше всего делать на "скриптовом" языке, таком как Python, и оно никогда не будет привязано к процессору.Скорее всего, скорость диска будет намного, намного медленнее, чем у любого языкового интерпретатора.

Другие советы

Мне кажется, что, поскольку у вас мало опыта работы с C, ваш лучший выбор - сделать это с помощью Java..JNI на самом деле не так уж плох.

Я вообще не знаком с интерфейсами HDF, отличными от интерфейса C, поэтому я не могу действительно сравнивать для вас.

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

Существует также вопрос о том, какие части API доступны для вас.Например, изначально я начинал с интерфейса C ++.Некоторые API по-прежнему были доступны только в C API.Это не проблема, когда вы используете C & C ++, но это может быть проблемой, если необходимый вам API недоступен для вас.

Сказав это, вам действительно нужно заморочить голову с точки зрения объектной модели C:например.использование указателей, ручек и т.д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top