![]() |
|
مشكلة في منظومة على شبكة - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : مشكلة في منظومة على شبكة (/showthread.php?tid=7595) |
مشكلة في منظومة على شبكة - Delphi4Us - 10-03-2016 السلام عليكم اشتشارني احدهم قائلا عندي منظومة تعمل على شبكة وواجهتها الرئيسية فيها الاداة DBgrid تعرض بيانات الموظفين ولنقل 4000 الالاف سجل . المهم ان طريقته هو انه جعل هناك مؤقت يقوم على تحديث هذه القائمة كل ثانية . ولكن المنظومة صارت بطيئة بشكل كبير جدا . من جهتي قلت له انك تقوم على تحديث البيانات في كل الاجهزة الطرفية حتى وان كانت غير مشغولة . اي تنقل البيانات بين الاجهزة بلا داع . لذلك اعطيت حلول . 1. اجعل زر للتحديث كلما اراد احد تحديث البيانات ينقر على الزر 2. لا تحدث الا البيانات التي في الصورة فقط قلت لماذا تحدث 4000 سجل بينما الذي على الشاشة عشرون . 3. اجعل مؤقت يتحسس حركة الفأرة ولوحة المفاتيح اذا توقفت عن العمل لا تحدث البيانات للاجهزة هذه 4. الابتعاد عن استخدام الامر Locate في البحث لانه يجلب كل البيانات تم ينتقل الى السجل المطلوب واستخدام الاستعلام المباشر هذه بعض النصائح . هل هي صحيحة ام هناك طرق اخرى . RE: مشكلة في منظومة على شبكة - محمد الدرة - 10-03-2016 نعم كلها صحيحة كذلك عند اعادة الاستخدام مرة اخرى سوى كانت بمؤقت او بزر تاكد من استخدام الامر adodable.disablecontrol لايقاف ارتباط القريد او اي مكون متصل بالبيانات وهذا يؤثر في سرعة العرض RE: مشكلة في منظومة على شبكة - Manarsoft - 10-03-2016 هناك طريقة أخرى للتخلص من إستهلاك موارد النظام التايمر او المبرمج لايقومان بالتخلص من موارد النظام التي استهلكت ويتركانها تتراكم لقد حدث لي هذا في برنامج تسيير مقهى الانترنت الحل هو : استدعاء الامر 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; RE: مشكلة في منظومة على شبكة - Delphi4Us - 12-03-2016 (10-03-2016, 07:50 PM)Manarsoft كتب : هناك طريقة أخرى للتخلص من إستهلاك موارد النظام كم برأيك سيستهلك التايمر من موارد لا اعتقد انه بهذه الاهمية في استهلاك الموارد ولكن البيانات هي التي تسبب مشكلة RE: مشكلة في منظومة على شبكة - Manarsoft - 12-03-2016 أنا قلت لك بمرور الوقت يتم استهلاك موارد النظام البيانات لا تسبب أي مشكلة، ولو كانت تسبب مشكلة فما الداعي لتطوير قواعد بيانات ضخمة كـOracle و MySQL وغيرها؟ هناك قواعد بيانات تحتوي على كمية لا حصر لها من السجلات ول نسمع يوما أن الكمية سببت مشكلة في أحد الويبينار لشركة PCSOFT قاموا بتجربة قاعدة بيانات تحتوي على ملايير السجلات أحد البنوك السويسرية تقول أن أنظمتها تعالج أكثر من 150 مليون طلب يوميا. DevExpress تقول أنها تقوم بإجراء إستعلام لمليون سجل في الوقت الحقيقي بدون مشكل. أنا جربت قاعدة بيانات بها 10000 سجل بدون مشكل في الفلترة RE: مشكلة في منظومة على شبكة - Delphi4Us - 13-03-2016 يا اخي انت تتحدث عن برنامج يعمل على جهاز واحد ونحن نتحدث عن برنامج يعمل على شبكة قد تكون قريبة لعشرات الامتار وقد تكون لمئات الامتار . وهذه ستكون البيانات في نقلها مشكلة . خاصة بعد ان تنقلها بين الاجهزة كل ثانية . وانا احدتك عن واقع عملي لمنظومة صديق . والتايمر الذي سيعمل على جهاز العميل سيستهلك جزء بسيط لا يذكر من موارد الجهاز . ولا يتم ايقافه لتحريره من الذاكرة . لانه يعمل على طول . ولو انه يتم انشاءه تم غلقه بشكل متكرر لقلت ربما . وبالنهاية عملية نقل البيانات الكثيرة ستكون عبئ على السيرفر . لانه سيستقبل الكثير من الطلبات من الاجهزة الطرفية كل ثانية . ويقوم باعدادها وارسالها . ولا اتحدث عن جودة قواعد البيانات وفي قدرتها التخزينية . تم انت تتحدث عن سيرفرات سويسرية لبنوك انت تتحدث عن سيرفرات عملاقة . والسيرفرات التي بالادارات هنا اجهزة عادية لا ترقى الى تلك RE: مشكلة في منظومة على شبكة - محمد عبد العزيز - 13-03-2016 إقتباس :منظومة تعمل على شبكة وواجهتها الرئيسية فيها الاداة DBgrid تعرض بيانات الموظفين ولنقل 4000 الالاف سجلالمسالة من البداية خطأ: وضع DBGrid كواجهة لبرنامج يعمل على الشبكة! في برمجة الشبكات القاعدة عامة تقول لا تتصل الا عند الحاجة لا تبقى متصلا لوقت طويل (اتصل، اقضي حاجتك ثم اقطع الاتصال) عند الاتصال اطلب فقط ما تحتاج من بيانات ان كنت تتصل كثير استخدت Connection Pooling حاول جعل منطق العمل business logic ما استطعت بجهة الخادم Server انسى مكونات TTable فكر فقط باستعلامات SQL ما استطعت! ... نعود للموضوع 4000 الاف سجل ليس بالعدد الكبير يمكن الاتصال والحصول عليها خلال ثوان، المشكل بمنطق عمل البرنامج انسى فكرة استخدام Timer واستخدم ما توفره لك قاعدة البيانات المستخدمة مثلا Events مع Firebird http://www.firebirdsql.org/file/documentation/papers_presentations/Power_Firebird_events.pdf RE: مشكلة في منظومة على شبكة - Delphi4Us - 19-03-2016 [quote='B.M.AbdelAziZ' pid='37638' dateline='1457857155'] إقتباس :انسى فكرة استخدام Timer واستخدم ما توفره لك قاعدة البيانات المستخدمة مثلا Events مع Firebird هل هذا يعني انه وبواسطة مكون مختص بالـ Event مع مكونات مثل زيوس مثلا يمكن للبرنامج في جهاز طرفي ان يقتنص حدث تحديث لسجل او اضافة او حذف...؟ بحيث يقوم بتحديث البيانات فقط اذا حدث تحديث للبيانات بقاعدة البيانات . |