سؤال

في C #، عند تلقي البيانات مع شبكة الطرق BeginReceive / EndReceive، هل هناك أي سبب يجب أن لا معالجة الحزم بمجرد الحصول عليها؟ بعض المهام يمكن أن تكون وحدة المعالجة المركزية مكثفة لائق. أنا أسأل لأنني رأيت بعض التطبيقات التي تدفع الحزم خارج في قائمة انتظار معالجة ومن ثم التعامل معها هناك. بالنسبة لي هذا يبدو زائدة عن الحاجة، لأنه بقدر ما أعرف، وأساليب التزامن <م> أيضا تعمل على ترابط التجمع.

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

المحلول

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

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

وكتبت مؤخرا مقالا عن النقل بواسطة خط أنابيب = "http://iodyner.spaces.live.com/blog/cns!7B505254340D5E9A!180.entry" يختلط من مأخذ الشبكة، والتي يمكنك العثور على <أ href لتجهيز البيانات = "نوفولو noreferrer"> هنا .

نصائح أخرى

وعموما، تحتاج إلى الحصول على "كفى" الحزم أن يكون عنصر البيانات التي هي "للمعالجة.

والمنظمة البحرية الدولية، ومن الأفضل أن يكون موضوع واحد مهمته استقبال البيانات، وآخر لفي الواقع معالجته.

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