مصرف بیش از حد منابع سیستم در ارتباط با دیتابیس
سلام
من یه برنامه نوشتم که داخلش از DataSet برای اتصال به دیتابیسم استفاده کردم
و یک DataSet.xsd داخل برنامه ساختم و داخل اون تیبل های دیتابیسم رو اضافه کردم
و هر جدولی یک سری تابع insert update delete و select بصورت پیشفرض ساخته و من از اونا استفاده میکنم!
منتها الان وقتی داخل یک تایمر میخوام اطلاعاتی رو داخل دیتابیس چک کنم و وارد کنم و حذف کنم cpu usage میره روی 100 درصد و تقریبا برنامه هنگ میکنه
آیا روش من اشتباهه؟
دیتابیس من هم sql server 2008 هست
ممنون
نقل قول: مصرف بیش از حد منابع سیستم در ارتباط با دیتابیس
تایمر هر چند مدت یک بار به دیتابیس سرمیزنه ؟؟
و ایا بهتر نیست از background ها استفاده کنی
نقل قول: مصرف بیش از حد منابع سیستم در ارتباط با دیتابیس
نقل قول:
نوشته شده توسط
mousa1992
تایمر هر چند مدت یک بار به دیتابیس سرمیزنه ؟؟
و ایا بهتر نیست از background ها استفاده کنی
2 ثانیه یک بار
در حد 25 کوئری ارسال میکنه!
سوال من اینه که آیا کاری که من کردم و از dataset استفاده کردم کار درستی هست یا نه؟
روش اصولیش چیه؟
نقل قول: مصرف بیش از حد منابع سیستم در ارتباط با دیتابیس
نقل قول: مصرف بیش از حد منابع سیستم در ارتباط با دیتابیس
روش اصولی برای این کار از استفاده از ENTITY FRAMEWORK هست و مورد دیگه استفاده از تایمر برای انجام این کار درست نیست تایمر چک نمیکنه که آیا این چند درخواستی که شما به دیتا بیس ارسال کردین انجام شده یا نه.
برای اینکار میتونید از BACKGROUNDWORKER استفاده کنید که کارهاتون رو منتقل کنه به یک ترد دیگه.
نقل قول: مصرف بیش از حد منابع سیستم در ارتباط با دیتابیس
نقل قول:
نوشته شده توسط
alitavakoli
روش اصولی برای این کار از استفاده از ENTITY FRAMEWORK هست و مورد دیگه استفاده از تایمر برای انجام این کار درست نیست تایمر چک نمیکنه که آیا این چند درخواستی که شما به دیتا بیس ارسال کردین انجام شده یا نه.
برای اینکار میتونید از BACKGROUNDWORKER استفاده کنید که کارهاتون رو منتقل کنه به یک ترد دیگه.
ممنون میشه یه نمونه رو مثال بزنید؟
یا یه سمپل کد ساده بدید که از اون الهام بگیرم
ممنون
نقل قول: مصرف بیش از حد منابع سیستم در ارتباط با دیتابیس
در ضمن من اگه الان بخوام به entity framework کوچ کنم ، پروژه ام چقدر باید تغییر کنه؟ با توجه به اینکه از dataset استفاده کردم!
نقل قول: مصرف بیش از حد منابع سیستم در ارتباط با دیتابیس
به فرض مثال میخوایم تعداد زیادی رکورد رو به صورت اتوماتیک وارد دیتا بیس کنیم
foreach(item in AllData)
{
using (StorageEntities context = new StorageEntities())
{
//Insert
_CustomerProductTbl = new CustomerProductTbl();
_CustomerProductTbl.CustomerId = AllData ._CustomerId;
_CustomerProductTbl.CustomerProductDateFa = AllData.datefa;
ClsDataBase.Database.AddToCustomerProductTbls(_Cus tomerProductTbl);
}
ClsDataBase.Database.SaveChanges();
}
}
این یک مثال ساده هست البته برای اینکه فرمتون به اصطلاح فریز یا همون هنگ نکنه میتونید این عملیات رو بفرستید داخل یک ترد دیگه:
نقل قول: مصرف بیش از حد منابع سیستم در ارتباط با دیتابیس
برای کوچ به ef زمان خیلی کمی میبره
فقط کافیه دیتا بیستون رو مدل کنید:
و دستورات linq رو یاد بگیرید
نقل قول: مصرف بیش از حد منابع سیستم در ارتباط با دیتابیس
منظورم از مثال BACKGROUNDWORKER بود!
نقل قول: مصرف بیش از حد منابع سیستم در ارتباط با دیتابیس
اصلاً شما به چه هدفی تایمر استفاده می کنی؟
اگه قصدت اینه که تغییرات سایر کاربران رو به برنامه منعکس کنی اون هم در بازه دو ثانیه بسیار کار اشتباهی می کنی.
شما باید از Service Broker و SqlDependency برای رفرش اطلاعات در سمت کلاینت استفاده کنی. وقتی اطلاعاتی در بانک ثبت میشه اتوماتیک به برنامه سیگنال می ده.
با عنوان رفرش دیتاگرید سرچ کن.
نقل قول: مصرف بیش از حد منابع سیستم در ارتباط با دیتابیس
ممنون
برنامه ی نمونه اش هم هست که ببینم چطوری کار میکنه؟
چون کلاینت های من 400 عدده و دارن همزمان دیتای جدید میفرستن
با این سیگنال ها مشکلی برای برامه پیش نمیاد؟