PDA

View Full Version : مشکل هنگ سیستم تحت شبکه بعد چند ثانیه مکث در کار مثلا 20 ثانیه و احتمالا نسبت به زمان time out



winner1
سه شنبه 25 آذر 1393, 15:19 عصر
سلام دوستان من یه مشکل تو برنامم دارم اینکه برنامه وقتی رو سیستم کلاینت اجرا میشه بعد از چند ثانیه مکث کاربر که با برنامه دیگه کار نمیکنه و به اصطلاح برنامه بیکار میشه و کاربر دوباره سراغ برنامه میره و می خواد کارشو ادامه بده برنامه 10 الا بیست ثانیه تو قسمت ای که به بانک اطلاعاتی وصل میشن هنگ میکنه:ناراحت:

FastCode
چهارشنبه 26 آذر 1393, 17:01 عصر
source code؟

winner1
پنج شنبه 27 آذر 1393, 11:06 صبح
source code؟
کد که زیاده ولی من از لینکم تو برنامم استفاده کردم میترسم نکنه لینک باعث این مشکل شده باشه

omid nasri
پنج شنبه 27 آذر 1393, 11:15 صبح
شما از نخ استفاده کن .ببین مشکل حل میشه؟ وقتی حجم عظیمی به صورت یکباره وارد بشه این موارد پیش میاد میتونی به جای استفاده از حلقه عادی از موازی سازی استفاده کنی که در فضای نام
system.thread.task
وجود داره استفاده کنی.

winner1
پنج شنبه 27 آذر 1393, 13:10 عصر
شما از نخ استفاده کن .ببین مشکل حل میشه؟ وقتی حجم عظیمی به صورت یکباره وارد بشه این موارد پیش میاد میتونی به جای استفاده از حلقه عادی از موازی سازی استفاده کنی که در فضای نام
system.thread.task
وجود داره استفاده کنی.
استفاده کردم میگم که زمانی که کاربر برنام رو بیکار می زاره حالا تو قسمتی که برنامه باید چیزی و از بانک بخونه میاد کارو ادامه بده برنامه هنگ میکنه و لی تو حالت عادی همه چی خوبه

omid nasri
پنج شنبه 27 آذر 1393, 15:03 عصر
شما بیا برنامه رو زیر زره بین ببر و انالیز کن و ببین مشکل کجاست

winner1
پنج شنبه 27 آذر 1393, 17:34 عصر
حدس خودم اینه که زمانی که برنامه به مدت طولانی (همون مکث که شاید یه دیقه دو دیقه) با بانک اطلاعاتی کاری نداره شاید ارتباطات به صورت کلی قطع میشه و وقتی دوباره میخواد وصل شه باعث هنگی میشه البته حدسه

winner1
جمعه 28 آذر 1393, 18:30 عصر
دوستان لطفا راهنمایی کنین

plus
جمعه 28 آذر 1393, 19:41 عصر
حدس خودم اینه که زمانی که برنامه به مدت طولانی (همون مکث که شاید یه دیقه دو دیقه) با بانک اطلاعاتی کاری نداره شاید ارتباطات به صورت کلی قطع میشه و وقتی دوباره میخواد وصل شه باعث هنگی میشه البته حدسه
در صورتی که دفعه اولی که قراره به دیتابیس متصل بشه هم همین تاخیر رو دایرین به احتمال زیاد حدستون درست هست.من با EF آشنایی ندارم اما شاید بتونید با تغییر تنظیمات Pooling مربوط به Connection String، مدت زمان Pooling رو بیشتر کنید.البته اگه مشکل از این باشه.
http://msdn.microsoft.com/en-us/library/8xx3tyca(v=vs.110).aspx
http://www.codeproject.com/Articles/17768/ADO-NET-Connection-Pooling-at-a-Glance

veniz2008
جمعه 28 آذر 1393, 22:56 عصر
سلام دوستان من یه مشکل تو برنامم دارم اینکه برنامه وقتی رو سیستم کلاینت اجرا میشه بعد از چند ثانیه مکث کاربر که با برنامه دیگه کار نمیکنه و به اصطلاح برنامه بیکار میشه و کاربر دوباره سراغ برنامه میره و می خواد کارشو ادامه بده برنامه 10 الا بیست ثانیه تو قسمت ای که به بانک اطلاعاتی وصل میشن هنگ میکنه:ناراحت:
سلام.
با این توضیحات نمیشه دلیل قطعی برای مشکلتون مشخص کرد. در کنار راهکار جناب plus، از ساختار try و catch برای کدهاتون استفاده کنید تا علت خطا رو متوجه بشید. احتمالش هست که کانکشن استرینگ شما ایراد پیدا میکنه و اون زمانی هم که میگید، برنامه سعی میکنه به دیتابیس متصل بشه که موفق به این کار نمیشه ولی باز نمیشه نظر قطعی داد.
موفق باشید.

FastCode
شنبه 29 آذر 1393, 02:16 صبح
یک thread برای keep alive استفاده کنید.
یعنی یک ترد که هر ۲ دقیقه یک بار دستور مثلا select 0 رو در کانکشن مربوطه اجرا کنه.
برای کنترل زمان و اتمام کار ترد موقع بسته شدن برنامه از AutoResetEvent استفاده کنید.

winner1
شنبه 29 آذر 1393, 09:31 صبح
سلام.
با این توضیحات نمیشه دلیل قطعی برای مشکلتون مشخص کرد. در کنار راهکار جناب plus، از ساختار try و catch برای کدهاتون استفاده کنید تا علت خطا رو متوجه بشید. احتمالش هست که کانکشن استرینگ شما ایراد پیدا میکنه و اون زمانی هم که میگید، برنامه سعی میکنه به دیتابیس متصل بشه که موفق به این کار نمیشه ولی باز نمیشه نظر قطعی داد.
موفق باشید.
دوست من خطا نمیده یه زمان یو هنگ میکنه مثلا تا لیست کالاهارو تو فامتور جستجو کنه ولی انجام میده بعد اون زمان

winner1
شنبه 29 آذر 1393, 09:55 صبح
یک thread برای keep alive استفاده کنید.
یعنی یک ترد که هر ۲ دقیقه یک بار دستور مثلا select 0 رو در کانکشن مربوطه اجرا کنه.
برای کنترل زمان و اتمام کار ترد موقع بسته شدن برنامه از AutoResetEvent استفاده کنید.
خودم اینکارو انجام دادم ولی سیستم ضعیفن و قدیمی :ناراحت:

veniz2008
شنبه 29 آذر 1393, 13:09 عصر
دوست من خطا نمیده یه زمان یو هنگ میکنه مثلا تا لیست کالاهارو تو فامتور جستجو کنه ولی انجام میده بعد اون زمان
همونطور که خودتون هم اشاره کردید سیستم ها از نظر سخت افزاری ضعیف هستن و احتمالا شما هم حجم زیادی از اطلاعات رو میخواید لود کنید که نیاز به رم زیادی داره که سیستم مشتری جوابگوی این حجم از داده ها نیست. در چنین مواردی بهترین راهکار صفحه بندی کردن گرید (لیست کالاها) هستش که هر بار یه تعداد رکورد (پیشنهاد میکنم بین 10 تا 20 رکورد) رو به کاربر نشون بدید.
اتفاقا در LINQ عمل صفحه بندی گرید، بسادگی قابل انجام هست. توی سایت نمونه کد صفحه بندی هم برای ADO.Net و هم برای LINQ وجود داره که با جستجو می تونید پیدا کنید.
البته این نکته رو هم بگم که صفحه بندی فقط مخصوص سیستم های ضعیف نیست. من روی سیستم هایی هم که سخت افزار قوی دارند هیچوقت لیست همه محصولات رو به یکباره نشون کاربر نمیدم (مگر خود مشتری تاکید خاصی داشته باشه).
موفق باشید.

winner1
شنبه 29 آذر 1393, 19:10 عصر
همونطور که خودتون هم اشاره کردید سیستم ها از نظر سخت افزاری ضعیف هستن و احتمالا شما هم حجم زیادی از اطلاعات رو میخواید لود کنید که نیاز به رم زیادی داره که سیستم مشتری جوابگوی این حجم از داده ها نیست. در چنین مواردی بهترین راهکار صفحه بندی کردن گرید (لیست کالاها) هستش که هر بار یه تعداد رکورد (پیشنهاد میکنم بین 10 تا 20 رکورد) رو به کاربر نشون بدید.
اتفاقا در LINQ عمل صفحه بندی گرید، بسادگی قابل انجام هست. توی سایت نمونه کد صفحه بندی هم برای ADO.Net و هم برای LINQ وجود داره که با جستجو می تونید پیدا کنید.
البته این نکته رو هم بگم که صفحه بندی فقط مخصوص سیستم های ضعیف نیست. من روی سیستم هایی هم که سخت افزار قوی دارند هیچوقت لیست همه محصولات رو به یکباره نشون کاربر نمیدم (مگر خود مشتری تاکید خاصی داشته باشه).
موفق باشید.

مثل اینکه سوالم و متوجه نشدی دوست من ببینین صفحه بندی رو انجام دادم برنامه بالا میاد اطلاعات لود میشه کاربر رکورداشو ثبت میکنه حالا وسط کار می خواد چایی بخوره برنام رو ول میکنه دوبار که میاد سراغ برنامه برنامه هنگ میکنه

plus
شنبه 29 آذر 1393, 19:31 عصر
شما مشخص نکردین که تنظیمات pooling رو آزمایش کردین یا نه؟ چه جوابی گرفتین؟
و یا در مورد روشی که یک Connection رو Alive نگه دارین منظورتون رو از "سیستم ضعیفن و قدیمی" نمیفهمم؟ یک Connection به دیتابیس منبع خاصی از سیستم، هرچقدر هم قدیمی باشه نمیگیره.حالا حتی اگه نخواین از این روش هم استفاده کنید حداقل آزمایش کنید تا بفهمید مشکل از همینجا هست یا نه.

winner1
شنبه 29 آذر 1393, 19:42 عصر
شما مشخص نکردین که تنظیمات pooling رو آزمایش کردین یا نه؟ چه جوابی گرفتین؟
و یا در مورد روشی که یک Connection رو Alive نگه دارین منظورتون رو از "سیستم ضعیفن و قدیمی" نمیفهمم؟ یک Connection به دیتابیس منبع خاصی از سیستم، هرچقدر هم قدیمی باشه نمیگیره.حالا حتی اگه نخواین از این روش هم استفاده کنید حداقل آزمایش کنید تا بفهمید مشکل از همینجا هست یا نه.
دادشم حق با شماس من قراره امشب بعد از اتمام کارشون این و تست کنم:قلب::بوس:

winner1
یک شنبه 30 آذر 1393, 13:13 عصر
دوستان با تشکر از آقای plus مشکل حل شد خدا بخواد یکم بیشتر تحقیق کنم و یه مقاله می زارم راجب پولینگ بازم ممنون plus :قلب: