سؤال

برنامجنا الرئيسي هو في Java ، لكن الكود الذي يستخرج بياناتنا من التخزين مكتوبة في C. أحتاج إلى إنشاء ملف HDF5 من البيانات المستخرجة. هل سيكون من الأفضل استخدام JNI للاتصال برمز C للحصول على البيانات ثم إنشاء ملف HDF5 من Java أو إنشاء HDF5 من رمز C؟

لدي خبرة قليلة مع JNI أو C.

أيضا أحد معاييرنا الرئيسية هو الأداء. كم من الأداء يضرب هناك عند استخدام JNI؟

هل كانت مفيدة؟

المحلول

حدود استدعاء الوظيفة "بطيئة" ، لذلك إذا كنت تقوم بالعديد من المكالمات إلى روتينك الأصلي ، فسوف يعاني الأداء.

مثال على نوع الشيء الذي مايو الاستفادة من الانتقال إلى JNI (أؤكد مايو, ، لأن Java أكثر من سرعة بما يكفي لأغراض عديدة) سيكون روتينًا للقيام بنوع من معالجة الصور على صورة نقطية كبيرة. ولكن لاستدعاء روتين JNI لكل منهما بكسل سيكون أبطأ بكثير من فعل ذلك داخل حلقة في جافا النقية.

إن استخراج البيانات من تنسيق إلى آخر هو ، بصراحة ، نوع الشيء الأفضل في لغة "البرمجة النصية" مثل Python ، ولن يتم ربطها أبدًا بواسطة وحدة المعالجة المركزية. بدلاً من ذلك ، ستكون سرعة القرص طريقة أبطأ من أي مترجم لغة.

نصائح أخرى

يبدو لي أنه نظرًا لأن لديك خبرة قليلة مع C ، فإن أفضل خيار لك هو القيام بذلك من مع Java .. Jni ليس بهذا السوء.

لست على دراية على الإطلاق مع واجهات HDF بخلاف C ، لذلك لا يمكنني المقارنة لك حقًا.

أود أن أشير إلى أن هذا هو واجهة برمجة التطبيقات التي تستخدمها جميع الواجهات الأخرى ، لذلك إذا كنت تجد أنك بحاجة إلى الخروج من الحد الأقصى للأداء ، فستكون واجهة برمجة تطبيقات C هي الأفضل.

هناك أيضًا سؤال حول أجزاء واجهة برمجة التطبيقات المتاحة لك. على سبيل المثال ، بدأت في الأصل مع واجهة C ++. كانت بعض واجهات برمجة التطبيقات لا تزال متوفرة فقط في C API. هذه ليست مشكلة عند استخدام C & C ++ ولكن قد تكون مشكلة إذا كانت واجهة برمجة التطبيقات التي تحتاجها غير متوفرة لك.

بعد قولي هذا ، تحتاج إلى أن يكون رأسك مشدودًا من حيث نموذج كائن C: على سبيل المثال. استخدام المؤشرات ، المقابض وما إلى ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top