2009-12-03 259 views
0

我在C#.NET Framework 2.0中遇到了form.Show()的問題。C#.NET form.Show()非常慢

//segment code (FormA's caller) 
    FormA frmA = new FormA(); 

    writeLog("Begin: " + Environment.TickCount); 
    frmA.SuspendLayout(); 
    frmA.Show(); 
    frmA.ResumeLayout(); 
    writeLog("End: " + Environment.TickCount); 

    .... 



    //segment code (FormA) 
    private void FormA_Load(object sender, EventArgs e){ 
     writeLog("Begin - Load: " + Environment.TickCount); 
    } 

從上面的段代碼,我建立在發佈模式並執行它。 我在我的筆記本電腦(Windows XP x86)上發現了「開始:」和「開始 - 加載」約2-3秒的不同時間,但服務器(Windows 2003 SP2)上的不同時間超過5秒。 我不知道爲什麼。

此外,備考有許多TableLayout和用戶控件(總控制約計800)

+0

「我不知道爲什麼。」這是因爲800是初始化的大量控件! – overslacked 2009-12-03 05:37:25

+0

在這種情況下,我打電話的InitializeComponent形式構造器,但爲什麼.show()來的Form_Load費時 – 2009-12-03 07:39:03

回答

3

如果你已經異形和優化你的表單,你可能需要使用一個等待光標,啓動畫面或進度條。

如果您還沒有成型,我強烈建議你這樣做。可能有一些方法會耗費很多時間。

如果你有很多的控制(?800你說)你的形式,你可能會考慮修改窗體的初始化使用一個BackgroundWorker - 本質上加載一個單獨的線程您的控件。根據您的具體要求,這可能會也可能不會。

編輯:

我認爲在我的答案,你的800和控制是必要的 - 它很可能只在需要時可以重新組織你的代碼加載控件。如果你不能立即重新組織你的代碼,分析找到最糟糕的罪魁禍首是一個不錯的第二選擇。

0

我覺得剖析的形式可能不是你所需要的,而是剖析了用戶控件。

甚至更​​好。如果你有表單中的選項卡,也許你可以將控件的加載移動到當標籤第一次是焦點時。只有在啓動時才加載用戶可見的cotrols,然後根據請求加載其餘的。

2

剖析您的初始化組件方法。你有沒有本地控制?第三方?其中一些渲染速度慢。你是否設置了任何控件的數據源?在設計時用項目填充控件?嘗試在頁面加載後移動它們。

是的,800個控制是一個頁面。這只是一個設計糟糕的頁面。首先解決它。

+0

是的,我有我的控制和一些控制使用作秀的TIFF圖像 – 2009-12-03 06:45:23

+1

+1呀,800是巨大的。但我希望OP能夠在分析後意識到這一點。 – 2009-12-03 06:52:14