Tuesday, September 8, 2009

Optimizations solve the problems!!! (continue)

After running ANTS profiler, we found the method that causes the problem, this method simply requested by users every one minute to get some data, the implementation of this method was very bad.
The following is the pseudo-code for the method

GetData(startTime,endTime)
{
//Is Data in the cache?
if exist_cache
GetFromCache()
else
//select from database
//update cache
}
In the previous code we found two problems; the first one is that the mechanism of updating the cache was not done regularly, so a lot of users requests go to database, that causes a performance problem as the number of users increases.
The second problem is the way of getting data from the cache itself, the cache was DataSet that contains single table, getting data was done by calling DataTable.Select method that consumes a lot of time.
We solved these problems simply by updating the cache continuously in a separate background thread so whatever the number of users requests you have only one database access, and the second problem was solved by distributing data over tables so we can get data directly from tables without using DataTable.Select method.

Tuesday, August 25, 2009

Optimizations solve the problems!!!

Yes, sometimes when you are going to develop a program or any solution, you put set of assumptions and start building on these assumptions, after finishing development then testing and if everything is ok you assume your application does not need any kind of optimization as it performs well!! till your assumptions broken!! "ooh shit, may it happen!?", sure see the following real case.
One month ago my friends in another company faced a big problem, as they have a real time service that supports around 200 users, the system was working perfectly without any problem till they made promotion for set of customers without testing the maximum capacity their service can support!!!

around 1000 users tried to use the service, at that point the service could not respond to other customers and it was fully utilized!!!

So I joined them and started digging into, to see what is the cause of the problem as they have a lot of components.
We found that they have an old ASP.NET 1.1 web sevice that is being used most of the time from all of the clients, around 80% it was the source of the problem.
We started running ASP.NET performance counter to see the number of requests and queued requests as these are good indicator for the problem, then we started running the profiler to find the method that consumes most of the time!!!

catch me next post

Monday, June 29, 2009

Programming Tips

1. How to execute critical methods even there is no available memory

Sometimes we need to execute critical tasks even the application faces "out of memroy" exception
like (Database rollback, sending messages from server to clients, saving the working environment..etc)

So how we can execute this method even there is no enough memory.

A good solution for this problem is:

During application startup try to allocate enough dummy memory and when the application faces "out of memory", free this memory and exeute the critical mehods.
2. How to safely access windows control from another thead

The golden windows rule says "Do not access control except through control thread owner".
The control thread owner is the thread which creates the control.
so we have to switch from worker thread to owner thread (it is the main thread in most of the cases) to access the control
see the following code snippt in c#


namespace ThreadingSample
{
public partial class MainForm : Form
{

Thread batchthread = null;

public MainForm()
{
InitializeComponent();
}

void UpdateProgress(int progress)
{

if (prgbarProcess.InvokeRequired)
{
prgbarProcess.Invoke((
MethodInvoker)delegate()
{
prgbarProcess.Increment(progress);
});
}

else
{
prgbarProcess.Increment(progress);
}
}

void StartBatchProcessing()
{

for (int i = 0; i <> {
Thread.Sleep(100);
UpdateProgress(i);
}
}
private void btnProcess_Click(object sender, EventArgs e)
{
batchthread = new Thread(new ThreadStart(StartBatchProcessing)); batchthread.IsBackground = true; batchthread.Start();
}
}
}

Saturday, December 20, 2008

حج 1429 -series 5

حج 1429
يوم 12
تحرك الباص الساعة 2:30 ظهراً متجه الى مكة كما قلت في ابلوست السابق، كالعادة الطريق زحمة جداً فوصلنا عند بداية شارع ام القرى (هو الشارع الذي في نهايته الحرم المكي و هو شارع طويل جداً) الساعة 5:30 و لكن عند هذه اللحظة توقف الطريق تماماً.
نزلت من الباص و توجهت الى الباص ماشياً لأن الطريق كما قلت كان شديد الزحام و فعلاً و صلت الساعة 9 و كان الحرم متوسط الزحام و لكن المشكلة هي خروج الحجاج عندما ينتهون من الطواف فيقومون بالخروج في شكل طابور و يتسبب هذا في توقف الطواف تماماً و لكن الحمد لله( كان معظم الناس بتفهم و بتقف و مش بتزق)
اليكم شكل الخروج













الحمد لله تم الطواف بسلام و أنتهيت من الطواف على الساعة 10:30 ثم اتصلت بالمشرف أسأله اين الباص لكي آخذ حقيبتي و أعود الى جدة والمفاجأه انه كان لازال في الطريق!!!
المهم ذهبت له و أخذت الحقيبة و عدت الى جدة بحمد الله.
و في النهاية كان الهدف من البوستس هو اظهار السلبيات الغريبة التي تحدث في الحج و شدة جهل الحجاج و المسلمين بصفة عامة و هذا ليس جهل ديني فقط و لكن هذا أستهتار
مثل
* شرب الحجاج للسجائر و هذا يدل أن الحاج المدخن متخذ الحج كاعادة و ليس عبادة
* التدافع الشديد و الجهل في التمسح بالأحجار و غيرها
* اللغو الذي ليس له هدف و الخوض في سبرة الأخرين

وفي النهاية أسأل الله ان يتقبل منا ومنكم صالح الأعمال

Wednesday, December 17, 2008

حج 1429 -series 4

حج 1429
ليلة 11
ذهبت الى منى الساعة 9 مساء و معي ثلاثة ممن يبيتون معي في نفس المسكن, وجدنا أن العساكر منتشرة في معظم أنحاء منى و تمنع الجلوس أو الوقوف و الحقيقة هذا من حقهم فقرر 2 ممن كانوا معي العودة، و لكني قررت أنا و الشخص المتبقي معي أن نقضي على الأقل نصف الليل هناك أخذاً بقول الشيخ مع العلم أن الشيخ قال ان لم تستطع المبيت هناك يمكنك العودة و لا حرج عليك.
قررنا أن نحاول في كل مكان حتى وجدنا مكان و جلسنا هناك الى الساعة 3:30 ثم عدنا الي العزيزية و صلينا الفجر و نمنا.
يوم 11 انتهى بسلام بدون مشاكل فرمي الجمار كان طبيعي و المبيت في منى كالعادة.
أنا كنت من المتعجلين فكان علي أن أغادر منى قبل الغروب, ففي يوم 12 كان من المفروض أن أرمي بعد الظهر (على طول عشان الباص هيمشي الساعة 2 الظهر).
فذهبت الساعة 11:45 و عند الوصول بداية جسر الجمارات وجدت أن الدور الأرضي و الدور الثاني مشمس فقلت أتخذ الدور الأرضي لأنه أقرب و لكن كانت غلطتي الفادحة.
نفس الزحمة التي كانت عند مسجد نمرة و عند الوصول الى الجمرة الصغرى لم أستطيع أن ارمي الجمار لشدة الزحام بل كان الناس يمشون في أفواج بسرعة و يدهسون كل من يقف أمامهم (مفيش مخ) هربت الى الخلف بصعوبة و عندها وجدت عسكري ينصح سيدة أن تجعل الشخص الذي معها أن ينوب عنها من شدة الزحام أو تصعد الى الدور العلوي و عندها سأله شخص أخر قألا ً "لماذا لا يوجد تنظيم مثل أمس؟" أجاب العسكري قائلا ً "دول حيوانات يا بوي" و لكن الحقيقة الحيوانات عندما تهشها تبعد و تخاف و لكن ما رأيته ليس له مثيل. المهم سألت العسكري كيف أصعد الى الدور العلوي فوصف لي و فعلا ذهبت و رجمت و كان هناك فرق رهيب بين الدور الأرضي و العلوي.
و أستطعت أن أعود الساعة 1:30 أي قبل الباص بنصف ساعة, و تحرك الباص الساعة 2:30 متجهاً الى مكة لطواف الوداع أو طواف الإفاضة و الوداع لمن لم يذهب لطواف الإفاضة (مثلي) ثم التوجه الى جدة.
و للحديث بقية

Sunday, December 14, 2008

حج 1429 -series 3

حج 1429
أثناء عودتي الى المخيم بعد خيبة الأمل للوصول الى مسجد نمرة توخيتُ الحذر كي أتخذ طريق غير الذي جئت منه أملا ً أن يكون أقل زحاماً و بالفعل و صلت الى المخيم حوالي الساعة 1:30 ظهراً حيث كنت عند مسجد نمرة الساعة 12 ظهراً أي أخذت حوالي 3 ساعات في الذهاب و ساعة و نصف في الرجوع.
عند وصولي الى المخيم أرتحت قليلاً من شدة التعب ثم صليت و جلست أذكر الله و أدعو حتى المغرب.
تحركت الباصات بعد أذان المغرب مباشرة حوالي الساعة 6 المغرب متجهة الى المزدلفة كي نبيت هناك ونصلي المغرب و العشاء جمع تأخير و قصر.
المسافة تأخذ حوالي 15 دقيقة في طريق متوسط الزحام و لكن كان الطريق شديد الزحام فوصلنا الساعة 12:15 ليلاً يعني أستغرقنا أكثر من 6 ساعات.
المهم المزدلفة مكان خالي و عليك أن تنام فيه حتى الفجر ثم تصلي بعدها و تنطلق لرمي الجمرات و التحلل الأصغر, أثنا ء المبيت في المزدلفة سمعت الحوارات كالعادة و لكن هذه المره كانت بين مصريين و عراقي عن العرب و صدام (مركزتش معاهم و نمت و بعدين قمت على صلاة الفجر صلينا و اتجهنا الى السكن عشان نريح شوية و بعدين نروح نرمي رمية العقبة ونتحلل و دي كانت الصدمة التالية)...(عايز أقول انه عادي جداً انك تشوف شخص بملابس الأحرام و بيدخن و في عرفة و في المزدلفة ... مش بقولكم كنت حاسس اني في شرم).
المهم الباص تحرك بعد الفجر الساعة 6 صباحاً وصل كالعادة الساعة 12 الظهر يعني الطريق أخذ 6 ساعات (اللي في الطبيعي يأخذ 15 دقيقة). المسكن كان عبارة عن مدرسة في منطقة أسمها العزيزية في مكة تبعد عن منى حوالى 800 متر و عن بداية جسر الجمرات 300 متر يعني قريبا الى حداً ما من الجمرات مقارنة ببعض المخيمات التي تبعد بكثير عن الجمرات و لكن الميزة انها في منى. ذهبنا نرمي جمرة العقبة الأولى الساعة 3 العصر و ذ ُهلت بالتنظيم عند جسر الجمرات و المباني الضخمة التي لازالت تحت الإنشاء.
فيوجد أكثر من طابق (أظن 4) لرمي الجمرات فتوجهتُ الى الدور الثاني رغم أنه أطول في المسافة (بس كان ضل)، المهم خلصنا و رجعنا الى السكن حلقنا و نمنا شوية.
"العزيزية ليست في منى و يجب المبيت في منى نصف الليل على الأقل في ليلة 11 و 12 و 13" هذه هي فتوة الشيخ الذي سألته هناك عن طريق الرقم المجاني المنتشر هناك.
فكان علي أن أفعل ذلك.
وللحديث بقية