با سلام
من بعضی فرمهایی که طراحی کردم هنگام اجرا به کندی لود می شود. از چند tablelayout در فرم استفاده کردم. میخواستم ببینم برای بالا رفتن سرعت لود فرم چه راهکارهایی وجود دارد؟
با سلام
من بعضی فرمهایی که طراحی کردم هنگام اجرا به کندی لود می شود. از چند tablelayout در فرم استفاده کردم. میخواستم ببینم برای بالا رفتن سرعت لود فرم چه راهکارهایی وجود دارد؟
با سلام
tablelayout بخاطر autosize ی که روی آبجکت های درونش انجام میشه کمی سرعت و کند می کنه ولی آنقدر نیست که اذیت کند مشکلتون بیشتر object هایی و کدهایی است که در هنگام load وارد کردید
به هر حال روش زیر کمک کنندس
در فرم خاصیت DoubleBuffered رو برابر True قرار بدید
و این کد رو هم هم طبق فرم برنامتون بزارید
public static void SetDoubleBuffered(System.Windows.Forms.Control c)
{
if (System.Windows.Forms.SystemInformation.TerminalSe rverSession)
return;
System.Reflection.PropertyInfo aProp = typeof(System.Windows.Forms.Control).GetProperty(" DoubleBuffered",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
aProp.SetValue(c, true, null);
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}
private void Form1_Load(object sender, EventArgs e)
{
SetDoubleBuffered(tableLayoutPanel1);
}
موفق باشید
لطفاً از پرسیدن سوال در خصوصی خودداری کنید.
قبل از ایجاد تاپیک، حتماً قوانین سایت را مطالعه فرمایید.
قوانین پرسش های دانشجویی
برای درست وارد شدن کد در قالب C# سایت، ابتدا کد رو درون Notepad.exe کپی سپس از اونجا به سایت در قالب C# منتفل کنید
نرم افزار code manager دستیار برنامه نویسان جهت نگهداری کد ها
لطفاً از پرسیدن سوال در خصوصی خودداری کنید.
قبل از ایجاد تاپیک، حتماً قوانین سایت را مطالعه فرمایید.
قوانین پرسش های دانشجویی
برای درست وارد شدن کد در قالب C# سایت، ابتدا کد رو درون Notepad.exe کپی سپس از اونجا به سایت در قالب C# منتفل کنید
نرم افزار code manager دستیار برنامه نویسان جهت نگهداری کد ها
با تشکر از پاسخ بسیار خوبتان. فرمها به سرعت لود می شوند. من فقط برای کنترلهای tablelayout گذاشتم. ولی یه مشکلی که به وجود امد دکمه های برنامه ام وقتی با موس می روم روی انها با تاخیر کلیک می شود. یعنی یک مقدار موس را باید روی کنترل نگه دارم تا عمل کند. مشکل بعدی این است که وقتی فرم لود میشود یه لحظه اول کل صفحه به مدت یک ثانیه مشکی می شود بعد فرم بالا می اید.
آخرین ویرایش به وسیله m_karimi : شنبه 06 آبان 1396 در 01:27 صبح
با سلام
بدون بررسی کردن پروژه بیشتر از این نمیشه راهنمایی کرد
یک توصیه دیگه اینه که یک خروجی بگیرید و پوشه Debug رو روی یک سیستم دیگه تست کنید
یک نمونه اینجا بزارید تا بهتر بشه بررسی کرد
موفق باشید
لطفاً از پرسیدن سوال در خصوصی خودداری کنید.
قبل از ایجاد تاپیک، حتماً قوانین سایت را مطالعه فرمایید.
قوانین پرسش های دانشجویی
برای درست وارد شدن کد در قالب C# سایت، ابتدا کد رو درون Notepad.exe کپی سپس از اونجا به سایت در قالب C# منتفل کنید
نرم افزار code manager دستیار برنامه نویسان جهت نگهداری کد ها
این قطعه را حذف کردم مشکل سیاهی برطرف شد ولی وقتی آن کد بود سرعت خیلی بهتر و بالاتر بود ولی مشکل سیاهی داشت
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}
این cp.ExStyle دیگر مقادیر آن چیست. نمیشه مقدارهای دیگه داد به ان؟
لینک زیر هم همین مشکل من رو داشتند
http://www.c-sharpcorner.com/forums/...r-on-form-load
آخرین ویرایش به وسیله m_karimi : یک شنبه 07 آبان 1396 در 00:52 صبح
با سلام
این دفعه DoubleBuffered فرم رو روی False قرار بدید
در فضای General (بالای فرم):
int intOriginalExStyle = -1;
bool bEnableAntiFlicker = true;
سازنده(Constructor) رو بشکل زیر تغییر بدید:
public Form1()
{
ToggleAntiFlicker(false);
InitializeComponent();
this.ResizeBegin += new EventHandler(Form1_ResizeBegin);
this.ResizeEnd += new EventHandler(Form1_ResizeEnd);
}
این متدها رو اضافه کنید:
private void ToggleAntiFlicker(bool Enable)
{
bEnableAntiFlicker = Enable;
this.MaximizeBox = true;
}
protected override CreateParams CreateParams
{
get
{
if (intOriginalExStyle == -1)
{
intOriginalExStyle = base.CreateParams.ExStyle;
}
CreateParams cp = base.CreateParams;
if (bEnableAntiFlicker)
{
cp.ExStyle |= 0x02000000; //WS_EX_COMPOSITED
}
else
{
cp.ExStyle = intOriginalExStyle;
}
return cp;
}
}
کد زیر رو در اونت ResizeBegin
ToggleAntiFlicker(true);
و این رو در ResizeEnd قرار بدید
ToggleAntiFlicker(true);
باز هم میگم بیشتر ممکنه مربوط به کدهای Load تون باشه
موفق باشید
لطفاً از پرسیدن سوال در خصوصی خودداری کنید.
قبل از ایجاد تاپیک، حتماً قوانین سایت را مطالعه فرمایید.
قوانین پرسش های دانشجویی
برای درست وارد شدن کد در قالب C# سایت، ابتدا کد رو درون Notepad.exe کپی سپس از اونجا به سایت در قالب C# منتفل کنید
نرم افزار code manager دستیار برنامه نویسان جهت نگهداری کد ها
سلام
داخل رویداد load کد نوشتید زیاده ؟ اگه اینطوره برای بالا بردن سرعت دستورات داخل load فرم را داخل یک تابع قرار بدین و بصورت نامتقارن در یک thread صداش بزنید.