التعامل مع الهائل في الكائنات في الذاكرة .صافي

StackOverflow https://stackoverflow.com/questions/1010040

  •  06-07-2019
  •  | 
  •  

سؤال

مرحبا شباب, هنا المشكلة ،

أساسا, لدي قائمة كبيرة جدا تحتوي بدورها كبير نسبيا القواميس

وذلك أساسا لدي كبير جدا في الذاكرة جمع.

ثم تسلسل هذه المجموعة يدويا إلى XML ، وإرساله عبر http.وغني عن القول, XML كبيرة جدا, في بعض الأحيان كبيرة جدا أحصل على OutOfMemory استثناء حتى قبل أن تحاول أن ترسل ذلك.

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

كيف يمكنني بكفاءة حساب حجم كل "قطعة" على ذبابة. أنا لا أريد أن اختيار عدد عشوائي مثل "عملية 100 البنود في أي وقت" ، أريد أن أعرف, تقريبا, كيف كبيرة كل قطعة يجب أن تكون على أساس كل حالة على حدة.

هتافات

التحديث

على الرغم @يعقوب توفير أفضل حل لهذه المشكلة بالذات ، المفاهيمي هيكل التطبيق هو في حد ذاته معيب.

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

ثم إرسال كل مقبول الحجم الوحدة واحدا تلو الآخر.

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

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

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

المحلول

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

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

نصائح أخرى

لماذا لا مجرد تيار من البيانات بحيث يمكنك فقط تحويل XML على الطاير تجنب وجود ضخمة ملف XML في الذاكرة ؟

كيف حالك إرسال ذلك ؟ يمكنك أن تفعل ذلك من خلال تمويل رأس المال العامل ، والتي يمكن أن تفعل الجري.ومن شأنه أيضا تعطيك خيار ، من خلال تكوين ما إذا كان استخدام XML أو الثنائية أو أيا كان.

إذا كان هذا هو مشكلة إرسال اليس كذلك أيضا مشكلة لتلقي ؟ يبدو أنك تحاول حل نصف المشكلة.XML هو بالنسبة للبيانات الكبيرة.

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