PDA

View Full Version : سوال: با یک شک به سیپی یو میخام تنها برنامه من اجرا بشه.....



haniyehghassami
دوشنبه 09 آبان 1390, 00:55 صبح
سلام
من میخام برنامم موقع لود روی سیستم تنها برای 10میلی یا نهایت30میلی ثانیه کل رم و کش و سی پی یو را بگیرم تا برنامه ام با بیشترین سرعت بالا بیاد

مثل زمانیکه که برنامه های سنگین دارن مثلا رندر میگیرن دیگه هیچ برنامه ای نمی تونه کار کنه

من میخام به اندازه ی 10 میلی ثانیه برنامم با سرعت تمام کامل لود شه....

برنامم به علت نیازش یه تیبل های جدول در اس کیو ال و پر بودن انها و الزام برای نمایش تمام اطلاعات جدولام
نیاز دارم سریعا لود شن و تقریبا 1مگ هم عکس با فرمت jpg رو فرمم هست

درحالت معموا 2 یا 3 ثانیه طول میکشه و عین برق گرفتگی بالا میاد:لبخند:

میشه راهنماییم کنین؟:لبخندساده:

adelmobasheri
دوشنبه 09 آبان 1390, 01:30 صبح
به گمانم باید از ترد استفاده کنی و تصاویر را در فرم هات دینامیک لود کنی و ولی نمی دونم چطوری

sheihaky
دوشنبه 09 آبان 1390, 04:17 صبح
سلام

1- اول به هدر فایلت کد زیر رو اضافه کن


using System.Threading;


2- کلاس زیر را به انتهای برنامت اضافه کن


public class DataExecutionContext
{
public int Counter { get; set; }
}


3- توی رویداد لود فرمت کد زیر رو اضافه کن


var contexts = new List<DataExecutionContext>(100);
for (int i = 0; i < 100; i++)
contexts.Add(new DataExecutionContext());

var latch = new CountdownEvent(contexts.Count);
var processData = new Action<DataExecutionContext>(c =>
{
for (int i = 0; i < 1500000; i++)// مدت زمان را می تونی با دستکاری 1500000 تغییر بدی
c.Counter++;
});

foreach (var context in contexts)
{
processData.BeginInvoke(context, new AsyncCallback(ar =>
{
latch.Signal();
}), null);
}
latch.Wait();


توجه داشته باش برنامت وقتی اجرا بشه سی پی یو تا 99 میره و نمیزاره برنامه ای دیگه اجرا بشه و سیستمت هم هنگ نمیکنه ولی برنامت تو این مدت 4 ثانیه هنگ داره ، چون گفتی شک باشه اونم چند ثانیه ای پس کارتو را میندازه ، اگه می خوایی پس از اجرای برنامت ، برنامه های بازشده قبلی بلاک شن باز اون یه بحث دیگس
اگه می خوای برنامت هنگام اجرا شدن تا زمانی که بسته بشه این امکانو داشته که برنامه های دیگه نتونن اجرا بشن ، باز اون یه بحث دیگس

موفق باشی

Amir Oveisi
دوشنبه 09 آبان 1390, 04:31 صبح
این سیستم عامل هست که تغیین میکنه چه برنامه چه میزان میتونه از منابع سیستم رو استفاده کنه (البته بر اساس درخواست هایی که از طرف برنامه براش ارسال میشه) و عامل دیگه ای اجازه نداره که در تخصیص میزان این منابع دخالتی داشته باشه.
پس به راه دیگه ای برای حل مشکلتون فکر کنید.
اصلی ترین عاملی که در اکثر موارد باعث کندی نرم افزارها هست اعمال I/O هستند. چون با دیسک سر و کار دارند و سرعت دیسک در مقایسه با RAM و CPU‌خیلی کمتره. بنا براین هر چقدر هم شما CPU سریع و یا RAM بیشتری داشته باشید تاثیری در سرعت کل برنامه نخواهد داشت چون همه منتظر عمل I/O خواهند موند.
اعمال مربوط به database‌هم معمولا جزو اعمال I/O‌محسوب میشن چون بالاخره باید اطلاعات رو از داخل فایل بخونن و یا در اون بنویسند. بنابراین باید به فکر راه کار های دیگری باشید. مثلا چه لزومی داره همه داده ها در زمان اجرای برنامه از db لود بشن؟ سوالاتی از این قبیل و تکنیک هایی مثل cachingو multithreading و یا asynchronous انجام دادن عملیات میتونه تا حد زیادی سرعت لود شدن و اجرای برنامه رو بالا ببره.

Amir Oveisi
دوشنبه 09 آبان 1390, 04:38 صبح
سلام

1- اول به هدر فایلت کد زیر رو اضافه کن

...

لطفا میشه در صورت امکان منطق کدی رو که نوشتید توضیح بدید برای من و بگید که این روش به چه شکل در سریع تر لود شدن داده های از دیتابیس موثر خواهد بود.
با تشکر

haniyehghassami
دوشنبه 09 آبان 1390, 14:58 عصر
1- اول به هدر فایلت کد زیر رو اضافه کن


using System.Threading;


2- کلاس زیر را به انتهای برنامت اضافه کن


public class DataExecutionContext
{
public int Counter { get; set; }
}


3- توی رویداد لود فرمت کد زیر رو اضافه کن


var contexts = new List<DataExecutionContext>(100);
for (int i = 0; i < 100; i++)
contexts.Add(new DataExecutionContext());

var latch = new CountdownEvent(contexts.Count);
var processData = new Action<DataExecutionContext>(c =>
{
for (int i = 0; i < 1500000; i++)// مدت زمان را می تونی با دستکاری 1500000 تغییر بدی
c.Counter++;
});

foreach (var context in contexts)
{
processData.BeginInvoke(context, new AsyncCallback(ar =>
{
latch.Signal();
}), null);
}
latch.Wait();


توجه داشته باش برنامت وقتی اجرا بشه سی پی یو تا 99 میره و نمیزاره برنامه ای دیگه اجرا بشه و سیستمت هم هنگ نمیکنه ولی برنامت تو این مدت 4 ثانیه هنگ داره ، چون گفتی شک باشه اونم چند ثانیه ای پس کارتو را میندازه ، اگه می خوایی پس از اجرای برنامت ، برنامه های بازشده قبلی بلاک شن باز اون یه بحث دیگس
اگه می خوای برنامت هنگام اجرا شدن تا زمانی که بسته بشه این امکانو داشته که برنامه های دیگه نتونن اجرا بشن ، باز اون یه بحث دیگس

موفق باشی


سلام
من یه سوالی داشتم
این CountdownEventچی هستش؟




var latch = new CountdownEvent(contexts.Count);

Amir Oveisi
دوشنبه 09 آبان 1390, 15:41 عصر
سلام
من یه سوالی داشتم
توصیه می کنم مفاهیم سیستم های عامل رو حتما مطالعه بفرمایید.

Amir Oveisi
دوشنبه 09 آبان 1390, 15:55 عصر
سلام

1- اول به هدر فایلت کد زیر رو اضافه کن


using System.Threading;


2- کلاس زیر را به انتهای برنامت اضافه کن


public class DataExecutionContext
{
public int Counter { get; set; }
}


3- توی رویداد لود فرمت کد زیر رو اضافه کن


var contexts = new List<DataExecutionContext>(100);
for (int i = 0; i < 100; i++)
contexts.Add(new DataExecutionContext());

var latch = new CountdownEvent(contexts.Count);
var processData = new Action<DataExecutionContext>(c =>
{
for (int i = 0; i < 1500000; i++)// مدت زمان را می تونی با دستکاری 1500000 تغییر بدی
c.Counter++;
});

foreach (var context in contexts)
{
processData.BeginInvoke(context, new AsyncCallback(ar =>
{
latch.Signal();
}), null);
}
latch.Wait();


توجه داشته باش برنامت وقتی اجرا بشه سی پی یو تا 99 میره و نمیزاره برنامه ای دیگه اجرا بشه و سیستمت هم هنگ نمیکنه ولی برنامت تو این مدت 4 ثانیه هنگ داره ، چون گفتی شک باشه اونم چند ثانیه ای پس کارتو را میندازه ، اگه می خوایی پس از اجرای برنامت ، برنامه های بازشده قبلی بلاک شن باز اون یه بحث دیگس
اگه می خوای برنامت هنگام اجرا شدن تا زمانی که بسته بشه این امکانو داشته که برنامه های دیگه نتونن اجرا بشن ، باز اون یه بحث دیگس

موفق باشی

۱- وقتی کدی رو از جایی copy و در اینجا paste‌میکنید لطفا منبعش رو هم در ادامه بیارید.
۲- وفتی کدی رو از جایی copy و در اینجا paste میکنید لطفا قبلش مطالبی رو که در مورد اون کد توضیح داده شده بخونید.
۳- بعد از اینکه این کار ها رو انجام دادید و مطمعن نیستید که پاسختون ربطی به این سوال خواهد داشت یا نه؛ لطفا پاسخ ندید یا اگر هم این کار رو انجام دادید این رو بگید که "ممکنه" جواب باشه!

این هم لینک:‌ http://stackoverflow.com/questions/2320611/what-are-the-reasons-why-the-cpu-usage-doesnt-go-100-with-c-sharp-and-apm
توصیه می کنم یک بار صورت سوال در اون لینک و پاسخ داده شده رو بخونید :)

موفق باشید

sheihaky
دوشنبه 09 آبان 1390, 19:38 عصر
1- وقتی کدی رو از جایی copy و در اینجا paste‌میکنید لطفا منبعش رو هم در ادامه بیارید.

آره من کپی پست کردم و وقتی می خوام کدی رو بنویسم اول چک می کنم این کد وجود دارد یا نه که اگه وجود نداشت کدشو می نویسم چون بر این باورم که هیچگاه کدی که می نویسیم بهینه نیست ولی ممکنه کدی که تو اینتر نت پیدا کردم بهینه تر باشه

در ضمن باس بگم چون مطلبو توی سیستم ذخیره داشتم و نمی دونستم منبعش چیه نذاشتم .



لطفا قبلش مطالبی رو که در مورد اون کد توضیح داده شده بخونید.

توضیحات رو نوشتم ولی چیزی که بفهمم رو می نویسم و این کارو کردم



لطفا پاسخ ندید یا اگر هم این کار رو انجام دادید این رو بگید که "ممکنه" جواب باشه!

آره صورت سوال رو خوب نخوندم از این بابت عذر خواهی می کنم ، من فک کردم که منظورش اینه وقتی برنامه اجرا میشه یه شک به سیستم عامل بده و مانع بشه برنامه ی دیگری رو اجرا کنیم ، من فکر کردم جوابم 100 در صد درسته واسه همین نیازی به گذاشتن "ممکنه " نبود !

لطفا بحث رو ادامه ندید و اگه راه حل رو می دونید بزارید .
موفق باشی