المشاركات : 1,677
المواضيع 349
:
: 1,069
الإنتساب : Nov 2013
السلام عليكم
اشتشارني احدهم قائلا عندي منظومة تعمل على شبكة وواجهتها الرئيسية فيها الاداة DBgrid تعرض بيانات الموظفين ولنقل 4000 الالاف سجل .
المهم ان طريقته هو انه جعل هناك مؤقت يقوم على تحديث هذه القائمة كل ثانية .
ولكن المنظومة صارت بطيئة بشكل كبير جدا .
من جهتي قلت له انك تقوم على تحديث البيانات في كل الاجهزة الطرفية حتى وان كانت غير مشغولة .
اي تنقل البيانات بين الاجهزة بلا داع .
لذلك اعطيت حلول .
1. اجعل زر للتحديث كلما اراد احد تحديث البيانات ينقر على الزر
2. لا تحدث الا البيانات التي في الصورة فقط قلت لماذا تحدث 4000 سجل بينما الذي على الشاشة عشرون .
3. اجعل مؤقت يتحسس حركة الفأرة ولوحة المفاتيح اذا توقفت عن العمل لا تحدث البيانات للاجهزة هذه
4. الابتعاد عن استخدام الامر Locate في البحث لانه يجلب كل البيانات تم ينتقل الى السجل المطلوب واستخدام الاستعلام المباشر
هذه بعض النصائح .
هل هي صحيحة ام هناك طرق اخرى .
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
المشاركات : 224
المواضيع 35
:
: 24
الإنتساب : Jan 2009
نعم كلها صحيحة
كذلك عند اعادة الاستخدام مرة اخرى سوى كانت بمؤقت او بزر تاكد من استخدام الامر
adodable.disablecontrol
لايقاف ارتباط القريد او اي مكون متصل بالبيانات وهذا يؤثر في سرعة العرض
المشاركات : 61
المواضيع 7
:
: 0
الإنتساب : Jan 2013
10-03-2016, 07:50 PM
(آخر تعديل لهذه المشاركة: 10-03-2016, 08:05 PM بواسطة Manarsoft.)
هناك طريقة أخرى للتخلص من إستهلاك موارد النظام
التايمر او المبرمج لايقومان بالتخلص من موارد النظام التي استهلكت ويتركانها تتراكم
لقد حدث لي هذا في برنامج تسيير مقهى الانترنت
الحل هو : استدعاء الامر Free
مثال بسيط:
في هذا المثال يمكن لبرنامجي أن يستهلك مقدارا من موارد النظام بمرور الوقت ويتظاعف ذلك تدريجيا
Label1.Caption := IntToStr(StrToInt(Label1.Caption) + 1);
if Label1.Caption = '3' then
begin
Timer1.Enabled := False;
Label1.Caption := '0';
end;
المثال التالي يتم التخلص من المشكل بتحرير موارد النظام
Label1.Caption := IntToStr(StrToInt(Label1.Caption) + 1);
if Label1.Caption = '3' then
begin
Timer1.Enabled := False;
Label1.Caption := '0';
Timer1.FreeOnRelease();
end;
المشاركات : 1,677
المواضيع 349
:
: 1,069
الإنتساب : Nov 2013
(10-03-2016, 07:50 PM)Manarsoft كتب : هناك طريقة أخرى للتخلص من إستهلاك موارد النظام
التايمر او المبرمج لايقومان بالتخلص من موارد النظام التي استهلكت ويتركانها تتراكم
لقد حدث لي هذا في برنامج تسيير مقهى الانترنت
الحل هو : استدعاء الامر Free
مثال بسيط:
في هذا المثال يمكن لبرنامجي أن يستهلك مقدارا من موارد النظام بمرور الوقت ويتظاعف ذلك تدريجيا
Label1.Caption := IntToStr(StrToInt(Label1.Caption) + 1);
if Label1.Caption = '3' then
begin
Timer1.Enabled := False;
Label1.Caption := '0';
end;
المثال التالي يتم التخلص من المشكل بتحرير موارد النظام
Label1.Caption := IntToStr(StrToInt(Label1.Caption) + 1);
if Label1.Caption = '3' then
begin
Timer1.Enabled := False;
Label1.Caption := '0';
Timer1.FreeOnRelease();
end;
كم برأيك سيستهلك التايمر من موارد
لا اعتقد انه بهذه الاهمية في استهلاك الموارد
ولكن البيانات هي التي تسبب مشكلة
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
المشاركات : 61
المواضيع 7
:
: 0
الإنتساب : Jan 2013
أنا قلت لك بمرور الوقت يتم استهلاك موارد النظام
البيانات لا تسبب أي مشكلة، ولو كانت تسبب مشكلة فما الداعي لتطوير قواعد بيانات ضخمة كـOracle و MySQL وغيرها؟
هناك قواعد بيانات تحتوي على كمية لا حصر لها من السجلات ول نسمع يوما أن الكمية سببت مشكلة
في أحد الويبينار لشركة PCSOFT قاموا بتجربة قاعدة بيانات تحتوي على ملايير السجلات
أحد البنوك السويسرية تقول أن أنظمتها تعالج أكثر من 150 مليون طلب يوميا.
DevExpress تقول أنها تقوم بإجراء إستعلام لمليون سجل في الوقت الحقيقي بدون مشكل.
أنا جربت قاعدة بيانات بها 10000 سجل بدون مشكل في الفلترة
الصقر يحلق وحيدا .. الغربان تحلق جماعات
المشاركات : 1,677
المواضيع 349
:
: 1,069
الإنتساب : Nov 2013
يا اخي انت تتحدث عن برنامج يعمل على جهاز واحد
ونحن نتحدث عن برنامج يعمل على شبكة قد تكون قريبة لعشرات الامتار وقد تكون لمئات الامتار .
وهذه ستكون البيانات في نقلها مشكلة .
خاصة بعد ان تنقلها بين الاجهزة كل ثانية .
وانا احدتك عن واقع عملي لمنظومة صديق .
والتايمر الذي سيعمل على جهاز العميل سيستهلك جزء بسيط لا يذكر من موارد الجهاز .
ولا يتم ايقافه لتحريره من الذاكرة .
لانه يعمل على طول .
ولو انه يتم انشاءه تم غلقه بشكل متكرر لقلت ربما .
وبالنهاية عملية نقل البيانات الكثيرة ستكون عبئ على السيرفر .
لانه سيستقبل الكثير من الطلبات من الاجهزة الطرفية كل ثانية .
ويقوم باعدادها وارسالها .
ولا اتحدث عن جودة قواعد البيانات وفي قدرتها التخزينية .
تم انت تتحدث عن سيرفرات سويسرية لبنوك انت تتحدث عن سيرفرات عملاقة .
والسيرفرات التي بالادارات هنا اجهزة عادية لا ترقى الى تلك
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
المشاركات : 3,703
المواضيع 101
:
: 579
الإنتساب : Feb 2008
إقتباس :منظومة تعمل على شبكة وواجهتها الرئيسية فيها الاداة DBgrid تعرض بيانات الموظفين ولنقل 4000 الالاف سجل
المسالة من البداية خطأ: وضع DBGrid كواجهة لبرنامج يعمل على الشبكة!
في برمجة الشبكات القاعدة عامة تقول
لا تتصل الا عند الحاجة
لا تبقى متصلا لوقت طويل (اتصل، اقضي حاجتك ثم اقطع الاتصال)
عند الاتصال اطلب فقط ما تحتاج من بيانات
ان كنت تتصل كثير استخدت Connection Pooling
حاول جعل منطق العمل business logic ما استطعت بجهة الخادم Server
انسى مكونات TTable فكر فقط باستعلامات SQL ما استطعت!
...
نعود للموضوع 4000 الاف سجل ليس بالعدد الكبير يمكن الاتصال والحصول عليها خلال ثوان، المشكل بمنطق عمل البرنامج
انسى فكرة استخدام Timer واستخدم ما توفره لك قاعدة البيانات المستخدمة مثلا Events مع Firebird
http://www.firebirdsql.org/file/document...events.pdf
رَبَّنَا اغْفِرْ لِي وَلِوَالِدَيَّ وَلِلْمُؤْمِنِينَ يَوْمَ يَقُومُ الْحِسَابُ
المشاركات : 1,677
المواضيع 349
:
: 1,069
الإنتساب : Nov 2013
[quote='B.M.AbdelAziZ' pid='37638' dateline='1457857155']
إقتباس :انسى فكرة استخدام Timer واستخدم ما توفره لك قاعدة البيانات المستخدمة مثلا Events مع Firebird
http://www.firebirdsql.org/file/document...events.pdf
هل هذا يعني انه وبواسطة مكون مختص بالـ Event مع مكونات مثل زيوس مثلا يمكن للبرنامج في جهاز طرفي ان يقتنص حدث تحديث لسجل او اضافة او حذف...؟
بحيث يقوم بتحديث البيانات فقط اذا حدث تحديث للبيانات بقاعدة البيانات .
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم