نقل قول نوشته شده توسط hotcat مشاهده تاپیک
ممنون از راهنمایی همه عزیزان
اول اینکه جناب احمدی بنده اطلاعی از کلاس
AutoResetEvent و کاربردش ندارم که خوب باید سرچ کنم و بررسی ممنون که فرمودید.
جناب P32_64 اول بابت راهنماییتون سپاس - راستش در مورد منطق برنامه ما، برنامه از شرکتهای زیر شاخه نفت و پتروشیمی هست و به نوعی با بورس هم در ارتباطه و خیلی امکان تغییر منطق برنامه رو نداریم و مدیران شرکت هم خیلی حاضر به تغییر سیاست کاری نیستن حتی نرم افزاری دیگه خودتون احتمالا دارین همینجا زندگی میکنین. و البته ما بصورت تئوری کیس استادی های مختلفی رو بررسی کردیدم تا به این حالت الان رسیدیم. درمورد بحث چک کردن کانکشن برنامه های زیادی رو دیدم که در لحظه کانکشن رو چک میکنن راستش اینکه بگیم نمیشه که تو مخ من نمیره شاید بگم با سی شارپ نمیشده ولی تا حالا نشده مشکلی رو بدون راه حل ول کنم پس اینم شدنی هست و خوشحال میشم نتیجه کار رو برای همه بزارم اینجا شاید بدرد دیگر دوستان هم بخوره. در مورد دیتابیس واقعا بهترین حالت هست شرایط کنونی ولی تو بحث برنامه سی شارپی بحث ترد هم کار شده ولی بازم پرفورمنس برنامه پایین هست و مشکل دسترسی همه فرمها به وضعیت کانکشن هست در حداقل زمان تازه الان لوکال هست و ما باید در نهایت بصورت کلاینت سرور دربیاریم که حدود 60 تا 70 تا کلاینت خواهند بود البته که بحث ترد قطعی خواهد بود ولی بازم گفتم شاید دوستانی باشن که قبلا این مورد رو داشتن و راه حل بهتر و هوشمندانه تری پیدا کردن. بازم از وقتی که گذاشتی و راهنماییتون ممنونم.
و در نهایت اقا محمد از راهنمایی و لینک خوبت ممنون در حال بررسی هستیم نتیجه رو اینجا میزارم انشالله و اگه باز هم راه بهتری بود ممنون میشم اطلاع بدید.
البته امروز یکی میگفت تو CLR راحت میشه این کار رو انجام داد ولی چطوریشو نمیدونم و نشدیدم و نمیدونم چه کار متفاوتی میشه انجام داد و دسترسی به اون شخصم ندارم اگه دوستان اطلاعی دارن لطفا بفرمایید. یه پیشنهاد دیگه هم بود که تو C++‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎‎‎‎‎‎‎ میشه بعد یه DLL بساز تو سی شارپ استفاده کن که ایشون هم به دلیل کمبود وقت همینو گفتن و بای دادن نمیدونم تو C++‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎‎‎‎‎‎‎ برای این مورد چی کار میشه کرد.؟؟!!
در نهایت فکر کنم باید یه روش ترکیبی رو پیدا کرد و البته خودم امروز به API ویندوز هم فکر میکردم که از طریق API شاید بشه سریع تر کانکشن رو بررسی کرد اونم ازطریق یه ویندوز سرویس و در صورت تغییر کانکشن اونوقت سرویس یه همه فرمهای باز اطلاع بده!!
بازم از همه ممنون
درود دوست عزیز
امیدوارم که مشکلتون رو حل کرده باشید در غیر اینصورت چند تا مطلب هستش :
در ابتدا بگم که منظور من که تغییر سیاست کاری شرکت نبود! از کجا همچین چیزی رو برداشت کردید ؟!!!
بگذریم ...
منظورم من اینه : اشتباه هستش که برنامه رو بیهوده مشغول چک کردن اتصال به اینترنت بکنید.
کلا برنامه ها نباید دائما چیزی رو چک کنن ، بلکه باید اجازه بدید سیستم عامل شما رو مطلع کنه. برنامه دانود منیجرتون یا مرورگر اصلا نمیاد دائمی اتصال به اینترنت رو چک کنه(چون اصلا نمیشه) .بلکه مشغول انجام عملیات اصلی میشه و هرجا به خطا رسید (اینترنت قطع شد) به کاربر اطلاع میده .
شما هم باید این طور عمل کنید .دستورات تعامل با پایگاه داده رو انجام بدید و در صورت خطا به کاربر بگید که اینترنت در دسترس نیست . به طور خلاصه منظور من اینه که برسی برقرار بودن اتصال رو از انجام عملیات جدا نکنید.
مورد بعدی اینه که این عملیات تست اتصال و عملیات مربوط به پایگاه داده رو از رابط برنامه (فرم ها)جدا کنید. وقتی جدا باشه راحت میشه در هر فرمی که میخواید ازش استفاده کنید .منظورم از جدا سازی اینه که در کلاس هیچ فرمی نباشه ، یک قسمت جدا بدون ظاهر گرافیکی.
تازه با این معماری میتونید یک سیستم "کش" مناسب پیاده سازی کنید و کارایی کد شبکه و دیتابیس رو بالا ببرید.
در اخر این که چون برنامه تون باید در نهایت به معماری کلاینت سرور تبدیل شه بهتره از ترد بهره ببرید، البته مستقیم خودتون رو در گیر Threading API نکنید بلکه از api های جدید تر مثل Asynchronous Programming استفاده کنید.
به جای سوکت هم میشه از wcf استفاده کرد برا بخش شبکه برنامه تون.
البته این ها همه در حد پیشنهاد بودن و اصراری در کار نبود .موفق باشید.