2010-06-17 25 views
1

我有一個VB6應用程序通過調用一個.NET DLL調出一個表單,但問題是這個表單需要將近5秒鐘纔會出現該菜單項是首先在VB6應用程序中選擇的。我如何加快速度?如何加速從VB6調用的.NET組件的'冷啓動'應用程序

這只是第一次慢,此後它是在一個可接受的速度,就像它是一個本地的VB6形式。

我在想,一個可能的解決方案是將VB6應用程序的閃屏時,從.NET的DLL加載的形式,但使不可見或不知何故沒有表現出來,然後在選擇菜單項我會讓它顯示或可見。

我有什麼選擇?

+0

但是,啓動.Net組件不應該是一個大的過程。我想這是.Net組件很慢?你能加快速度嗎?否則,在啓動期間啓動它似乎是一個很好的選擇,如果您知道它將在以後使用並可能多次使用 – simendsjo 2010-06-17 08:14:56

+0

@simendsjo:我可以對.NET組件做一些可能的改進,但我認爲.NET調用是造成一些延誤。我將如何在飛濺過程中啓動表單並使其不可見? – CJ7 2010-06-17 08:19:15

+0

@Craig Johnston:您可以將表單設置爲默認不可見,然後在您的組件中有一個「顯示」方法,VB6應用程序可以調用它而不是創建它。 – 2010-06-17 08:20:49

回答

0

我不知道到底是什麼問題,但我會建議首先,使用方法分析更詳細地調查問題,看看哪個方法需要這麼多時間。

但我的猜測是,VB6應用程序需要將各種.NET Dll運行時加載到內存中..需要所有的時間,您可以通過在程序啓動時加載所有的Dll來實現 - 我認爲任何調用.NET函數都會導致dll加載,因此您可以在表單中添加一個簡單的方法,實際上並沒有做任何事情,在啓動畫面中調用它,它應該有所幫助..

但是,只是一個受過教育的猜測,調查.. 使用sysinternals來查看哪些DLLS正在加載..

0

我想這是事實,你必須加載.Net框架。你可以在你的.Net dll中添加一個虛擬方法,它並不真正做任何事情,然後在啓動畫面中調用它,這樣一切都應該已經加載。

+0

或者如果可能的話,在啓動/啓動畫面期間調用該虛擬方法異步。 – 2010-06-17 12:14:39

+0

它已經在飛濺期間創建了一個(非交互式).NET對象,所以這可能不是原因,但我想也許.NET窗體的程序集不得不第一次加載?每次之後都會有更少的延遲。 – CJ7 2010-06-19 23:53:45

0

有幾件小事你可以做,改變框架版本> fx3.5,減小尺寸的組件,減少.net dll在程序集中調用NGEN的次數。

+0

不需要在所有部署的機器上運行NGEN? – CJ7 2010-06-18 04:32:25

+0

從工作%windir%\ Microsoft.net \ Framework \ v?部署爲.net的一部分。ngen.exe – Iain 2010-06-18 12:51:04

+0

是的,但我的ngen。NET程序集必須在部署的機器上單獨運行,而不是作爲.net框架安裝的一部分。 – CJ7 2010-06-19 23:52:40

相關問題