我有一個VB6應用程序通過調用一個.NET DLL調出一個表單,但問題是這個表單需要將近5秒鐘纔會出現該菜單項是首先在VB6應用程序中選擇的。我如何加快速度?如何加速從VB6調用的.NET組件的'冷啓動'應用程序
這只是第一次慢,此後它是在一個可接受的速度,就像它是一個本地的VB6形式。
我在想,一個可能的解決方案是將VB6應用程序的閃屏時,從.NET的DLL加載的形式,但使不可見或不知何故沒有表現出來,然後在選擇菜單項我會讓它顯示或可見。
我有什麼選擇?
我有一個VB6應用程序通過調用一個.NET DLL調出一個表單,但問題是這個表單需要將近5秒鐘纔會出現該菜單項是首先在VB6應用程序中選擇的。我如何加快速度?如何加速從VB6調用的.NET組件的'冷啓動'應用程序
這只是第一次慢,此後它是在一個可接受的速度,就像它是一個本地的VB6形式。
我在想,一個可能的解決方案是將VB6應用程序的閃屏時,從.NET的DLL加載的形式,但使不可見或不知何故沒有表現出來,然後在選擇菜單項我會讓它顯示或可見。
我有什麼選擇?
我不知道到底是什麼問題,但我會建議首先,使用方法分析更詳細地調查問題,看看哪個方法需要這麼多時間。
但我的猜測是,VB6應用程序需要將各種.NET Dll運行時加載到內存中..需要所有的時間,您可以通過在程序啓動時加載所有的Dll來實現 - 我認爲任何調用.NET函數都會導致dll加載,因此您可以在表單中添加一個簡單的方法,實際上並沒有做任何事情,在啓動畫面中調用它,它應該有所幫助..
但是,只是一個受過教育的猜測,調查.. 使用sysinternals來查看哪些DLLS正在加載..
我想這是事實,你必須加載.Net框架。你可以在你的.Net dll中添加一個虛擬方法,它並不真正做任何事情,然後在啓動畫面中調用它,這樣一切都應該已經加載。
或者如果可能的話,在啓動/啓動畫面期間調用該虛擬方法異步。 – 2010-06-17 12:14:39
它已經在飛濺期間創建了一個(非交互式).NET對象,所以這可能不是原因,但我想也許.NET窗體的程序集不得不第一次加載?每次之後都會有更少的延遲。 – CJ7 2010-06-19 23:53:45
但是,啓動.Net組件不應該是一個大的過程。我想這是.Net組件很慢?你能加快速度嗎?否則,在啓動期間啓動它似乎是一個很好的選擇,如果您知道它將在以後使用並可能多次使用 – simendsjo 2010-06-17 08:14:56
@simendsjo:我可以對.NET組件做一些可能的改進,但我認爲.NET調用是造成一些延誤。我將如何在飛濺過程中啓動表單並使其不可見? – CJ7 2010-06-17 08:19:15
@Craig Johnston:您可以將表單設置爲默認不可見,然後在您的組件中有一個「顯示」方法,VB6應用程序可以調用它而不是創建它。 – 2010-06-17 08:20:49