سؤال

أنا من النوع الذي أعتبره استخدامه بمثابة البنية.

  • وهو يمثل قيمة واحدة
  • هو غير قابل للتغيير

ولكن المشكلة هي أنه لديه 6 مجالات int.

لذلك الحل الذي أود أن استخدام هذا النوع ؟

  1. الاستمرار في استخدام البنية?
  2. تغيير إلى الصف ؟
  3. أو pack 6 الصحيحه في مجموعة من الباحث ، وهكذا كان حقل واحد فقط

تحرير

حجم البنية مع 6 صحيح المجالات 24 بايت ، وهي ضخمة لتمرير حولها.يوصي حجم البنية ليست أكثر من 16 بايت

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

المحلول

يعتمد ذلك على كيفية استخدامه؟

  1. هل ستقوم بتخصيص الكثير منها مقابل مرورها كثيرًا؟
  2. هل سيتم استهلاكها من قبل رمز الطرف الثالث؟ في هذه الحالة ، تمنحك الفصول الدراسية عادةً مزيدًا من المرونة.
  3. هل تريد بنية مقابل دلالات الفصل؟ على سبيل المثال ، غير قابلية؟
  4. هل ستستفيد من وجود اثنين من الحالات التي تم إنشاؤها مسبقًا من هذه الفئة يمكن إعادة استخدامها لتمثيل الحالات الخاصة؟ على غرار String.Empty. في هذه الحالة ، ستستفيد من الفصل.

من الصعب الإجابة فقط من المعلومات التي قدمتها في سؤالك.

نصائح أخرى

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

ها هو المرجعي هذا يفسر ذلك بمزيد من التفصيل.

سأجعله فصلًا (#2) وبعد ذلك لن تقلق بشأنه.

من المحتمل أن يؤدي استخدام مجموعة من ستة أعداد صحيحة (#3) إلى جعل الكود الخاص بك أكثر صعوبة في القراءة. فئة مع معرفات وصفية لكل int سيكون أفضل بكثير.

دون رؤية بنيتك ، من الصعب قول أي شيء بشكل نهائي. لكني أظن أنه يجب عليك ترك هذا كهيكل.

ماذا عن WriteOnce<int[]> ?

أود أن أقترح كتابة معيار صغير لقياس أداء الخيارات المختلفة ، هذه هي الطريقة الوحيدة لمعرفة ذلك بالتأكيد. قد تفاجأ بالنتائج (غالبًا ما أكون).

(أفترض أن اهتمامك هنا هو الأداء.)

إذا كانت البيانات حامل ستكون ثابتة البنية-مقابل الدرجة السؤال من المرجح أن تعتمد على متوسط عدد من الإشارات التي من شأنها أن توجد كل حالة.إذا كان أحد لديه مجموعة من TwentyFourByteStruct[1000] ، أن مجموعة سوف تأخذ 24,000 بايت ، بغض النظر عما إذا كان كل عنصر يحمل قيمة مختلفة, كل عناصر يحملون نفس القيمة ، أو في مكان ما بينهما.إذا كان أحد لديه مجموعة من TwentyFourByteClass[1000] ، أن مجموعة سوف تأخذ 4000 أو من 8000 بايت (على أنظمة 32/64-بت) ، وكل متميزة مثيل TwentyFourByteClass الذي يتم إنشاؤه سوف يستغرق حوالي 48 بايت.إذا كان كل من مجموعة عناصر يحدث لعقد إشارة إلى نفس TwentyFourByteClass وجوه ، المجموع سوف يكون 4,048 أو 8,048 بايت.إذا كانت جميع عناصر مجموعة عقد مراجع مختلفة TwentyFourByteClass الكائنات ، المجموع سوف يكون 52,000 أو 56,000 بايت.

أما عن وقت التشغيل أداء أفضل أداء يمكن أن تحصل عموما سوف يتم تمرير الهياكل بالإشارة.يمر الهياكل حسب القيمة يتطلب نسخها ، والتي يمكن الحصول على مكلفة هياكل أكبر من 16 بايت (.صافي يتضمن تحسينات على الهياكل 16 بايت أو أصغر) ، ولكن تكلفة نوع القيمة بالرجوع هو نفسه سواء كان هو 1 بايت أو 16,000 بايت.

بشكل عام ، عند تخزين أكثر من قطعتين من البيانات ذات الصلة ، أحب أن أجعل فئة تربطهما معًا. خاصة إذا كنت سأمرهم كوحدة.

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