الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سرعة جلب البيانات

بدأه l-omari في 27 يونيو 2008 · 5 رد · 1,089 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ارجو المساعدة في طريقة تسرع جلب البيانات

حيث يوجد عندي فورم عند فتحه اقوم بتعبئة 5 combobox

بحدود 20000 record

المشكلة انه يستغرق 10 ثواني

لقد كنت استخدم لكل combo

connection

ثم قمت بجمعهم في connection واحد

ولكن النتيجة اي من ناحية السرعة بقيت متشابهة

ارجو المساعدة في اعطائي طريقة سريعة لجلب البيانات

وشكرا

#2

اخي العزيز السرعة في حالتك هذه تعتمد على مواصفات الحاسبة التي يعمل عليها البرنامج فكما تعلم انك عند استدعاء 20000 قيد يتم تحميلها ضمن الداتاسيت في الرام وهذا يؤثر على اداء الحاسبة عموماً ولحل هذه المشكلة اقترح عليك عدم استدعاء كافة قيم الحقول .. اي استدعاء الحقول الضرورية فقط لكي يكون البرنامج فعال ولا يؤثر على الحاسبة وطبعاً انت من سيحدد ما هي الحقول المهمة. وثانياً ان تقوم بتقليص البيانات في الذاكرة قدر الامكان .. اي ان تعرف لحقل الاسم مثلاً قيمة string(20) بدلاً من string والخ..

وثالثاً ان تقوم بعمل index للحقول الاساسية في قاعدة بياناتك فهذا يسرع البحث عند بشكل كبير جداً.

ارجو ان اكون قد افدتك..

#3

السلام عليكم ورحمة الله

يمكن إستخدام الـ Multi-Threading لجلب البيانات في Thread منفصلة عن التي يعمل عليها التطبيق لتسريع عملية إحضار البيانات وإذا كنت تسخدم قاعدة بيانات SQL Server من الأفضل أن تقوم بالتعامل مع الـ Stored Procedure بدلاً عن كتابة جملة الإيتعلام داخل كود البرنامج.

على العموم ، نفترض وجود دالة إسمها GetData تقوم بإرجاع DataTable يحتوى على البيانات المراد عرضها في الـ ComboBox على الشكل التالي :

Private Function GetData As DataTable
'Write your code to return 20000 records here
End Function

قم بعمل إجراء يقوم بتعبئة الـ ComboBox على النحو التالي:

Private Sub BindComboBox
With ComboBox5
.DataSource=GetData()
.DisplayMember  = "Field Name to be displayed"
.ValueMember = "Field Name to be value"
End With
End Sub

وعند تحميل الفورم في الحدث Load قم بكتابة الكود التالي:

Dim t As New Threading.Thread(AddressOf BindComboBox)
t.Start()

ثم أنظر الفرق

والله الموفق

#4

السلام عليكم

اضافة الي الكلام السابق

يفضل الا تسترجع البيانات كلها مرة واحدة

و اظن ان المستخدم لو عنده combobox فيها مثلا 1000 اختيار فقط

هيبقي التعامل معها صعب علي المستخدم و شكل الفورم مش هيبقي ظريف

افضل انك تعرضهم علي هيئة pages يعني اعرض 50 و لما يضغط next استرجع 50 غيرهم و هكذا

و ممكن تحفظ البيانات اللي انت استرجعتها بحيث لو عمل previous تكون مش محتاج تتصل بالداتا بيز مرة اخري

بالتوفيق

#5
اقتباس
السلام عليكم

اضافة الي الكلام السابق

يفضل الا تسترجع البيانات كلها مرة واحدة

و اظن ان المستخدم لو عنده combobox فيها مثلا 1000 اختيار فقط

هيبقي التعامل معها صعب علي المستخدم و شكل الفورم مش هيبقي ظريف

افضل انك تعرضهم علي هيئة pages يعني اعرض 50 و لما يضغط next استرجع 50 غيرهم و هكذا

و ممكن تحفظ البيانات اللي انت استرجعتها بحيث لو عمل previous تكون مش محتاج تتصل بالداتا بيز مرة اخري

بالتوفيق

السلام عليكم أخي AhmedElbaz

أنا أعتقد ومن وجهة نظري الخاصة أن أداة الـ ComboBox ليست هي الأدة المناسبة لعرض هذا العدد من السجلات ، وبالرغم من ذلك لا أعتقد أن هنالك مشكلة في التعامل مع هذا العدد من السجلات في أداة الـ ComboBox وذلك لوجود خاصية الـ AutoComplete والتي تسهل كثيراً على المستخدم في التعامل مع البيانات الموجودة داخل تلك الأداة.

أما بالنسبة للإحتفاظ بالبيانات المسترجعة بحيث لا يرجع للداتا بيز مرة أخرى ، فهذا يؤدي أيضاً الى بطء عمل البرنامج وزيادة إستهلاك الذاكرة لأنه إحتمال أو إستثناء أن يقوم المستخدم بالرجوع الى ال50 سجل السابقة ولايمكن أن يبني المبرمج أي نظام بإعتماد الإستثناء كقاعدة والرجوع لقاعدة البيانات أفضل من الإحتفاظ بهذا العدد الكبير من البيانات وأنا هنا أقصد الـ 20000 سجل.

والله الموفق

#6
اقتباس
السلام عليكم أخي AhmedElbaz

أنا أعتقد ومن وجهة نظري الخاصة أن أداة الـ ComboBox ليست هي الأدة المناسبة لعرض هذا العدد من السجلات ، وبالرغم من ذلك لا أعتقد أن هنالك مشكلة في التعامل مع هذا العدد من السجلات في أداة الـ ComboBox وذلك لوجود خاصية الـ AutoComplete والتي تسهل كثيراً على المستخدم في التعامل مع البيانات الموجودة داخل تلك الأداة.

أما بالنسبة للإحتفاظ بالبيانات المسترجعة بحيث لا يرجع للداتا بيز مرة أخرى ، فهذا يؤدي أيضاً الى بطء عمل البرنامج وزيادة إستهلاك الذاكرة لأنه إحتمال أو إستثناء أن يقوم المستخدم بالرجوع الى ال50 سجل السابقة ولايمكن أن يبني المبرمج أي نظام بإعتماد الإستثناء كقاعدة والرجوع لقاعدة البيانات أفضل من الإحتفاظ بهذا العدد الكبير من البيانات وأنا هنا أقصد الـ 20000 سجل.

و عليكم السلام

تمام كلامك

مواضيع مشابهة