سؤال

لديّ عدد معقول من السجلات في جدول Azure الذي أحاول القيام بتشفير البيانات لمرة واحدة. اعتقدت أنه يمكنني تسريع الأمور باستخدام أ Parallel.ForEach. أيضًا نظرًا لوجود أكثر من سجلات 1K ولا أريد أن أتجول مع الرموز المميزة المستمرة ، فأنا أستخدم CloudTableQuery للحصول على التعداد الخاص بي.

مشكلتي هي أن بعض سجلاتي قد تم تشفيرها مزدوجًا وأدركت أنني لست متأكدًا من كيفية إرجاع الخيط CloudTableQuery.Execute() هو. هل كان لدى أي شخص آخر أي خبرة في هذا المزيج؟

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

المحلول 2

على الرغم من بذل قصارى جهدي ، لم أتمكن من تكرار مشكلتي الأصلية. استنتاجي هو أنه من الجيد الاستخدام تمامًا Parallel.ForEach حلقات مع CloudTableQuery.Execute().

نصائح أخرى

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

في السيناريو الخاص بك ، سيكون لدي الخيط الأصلي الذي يسمى Execut BlockingCollection<T>. قبل أن تبدأ في القيام بذلك ، تريد أن تبدأ منفصلة Task التي ستتحكم في استهلاك تلك العناصر باستخدام Parallel::ForEach. الآن ، ربما تريد أيضًا البحث في استخدام GetConsumingPartitioner طريقة مكتبة الموازية للمكتبة من أجل أن تكون أكثر كفاءة لأن القسم الافتراضي سوف يخلق أكثر من النفقات العامة مما تريد في هذه الحالة. يمكنك قراءة المزيد عن هذا من منشور المدونة هذا.

مكافأة إضافية لاستخدام BlockingCollection<T> فوق الخام ConcurrentQueueu<T> هو أنه يوفر القدرة على تعيين الحدود والتي يمكن أن تساعد في منع المنتج من إضافة المزيد من العناصر إلى المجموعة أكثر مما يمكن للمستهلكين مواكبة. ستحتاج بالطبع إلى إجراء بعض اختبارات الأداء للعثور على البقعة الحلوة لتطبيقك.

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