首页 新闻 赞助 找找看

C# BHO 优化 / 加速?

0
悬赏园豆:30 [已解决问题] 解决于 2014-12-31 13:21

最近用 c# 写的BHO经常会遇到加载时间过长,导致IE11出现耗时插件禁用对话框,说我的BHO加载时间超过了200ms, 但我怎么优化也没有办法达到其它控件的0.01s,而始终在0.10之上,有时会超过0.20而导致这个问题再次出现。

 

随后我干脆建了一个空的BHO,发现竟然耗时也在0.10以上,第一次加载有时也会超过0.20s,所以我觉得可能是.net的原因,我用vb6建了一个,虽然有一些代码,但显示加载时间0.01s,下面是我的空BHO的c#代码:

[ComVisible(true), Guid("C59D3771-0E3E-48B8-97C5-9CD2C091CF09"), ClassInterface(ClassInterfaceType.None)]
    public class BHO : IObjectwithsite
    {
        public int SetSite(object site)
        {
            return 0;
        }

        public int GetSite(ref Guid guid, out IntPtr ppvSite)
        {
            IntPtr punk = Marshal.GetIUnknownForObject(IPCServer.WebBrowser);
            int hr = Marshal.QueryInterface(punk, ref guid, out ppvSite);
            Marshal.Release(punk);
            return hr;
        }

        #region RegisterBHO

        public static string BHOKEYNAME = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects";  

        [ComRegisterFunction]  
        public static void RegisterBHO(Type type)  
        {
            RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(BHOKEYNAME, true);  
 
            if (registryKey == null)  
                registryKey = Registry.LocalMachine.CreateSubKey(BHOKEYNAME);  
 
            string guid = type.GUID.ToString("B");  
            RegistryKey ourKey = registryKey.OpenSubKey(guid);  
  
            if (ourKey == null)  
                ourKey = registryKey.CreateSubKey(guid);  
  
            registryKey.Close();  
            ourKey.Close();  
        }  
  
        [ComUnregisterFunction]  
        public static void UnregisterBHO(Type type)  
        {  
            RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(BHOKEYNAME, true);  
            string guid = type.GUID.ToString("B");  
  
            if (registryKey != null)  
                registryKey.DeleteSubKey(guid, false);
        }

        #endregion
    }

 

我试过使用Ngen编译为本地化代码,虽有一点点速度提升,但几乎可以忽略,请问有办法缩短他的加载时间吗?

空明流光的主页 空明流光 | 初学一级 | 园豆:106
提问于:2014-12-23 11:42
< >
分享
最佳答案
0

办法是不使用C#,改用C++,或者等待微软将NET FRAMEWORK在IE中默认加载优化。

收获园豆:15
爱编程的大叔 | 高人七级 |园豆:30839 | 2014-12-23 12:22
其他回答(1)
0

c#真不适合干这个, 要干也是vb干, 要不就c++干。  

收获园豆:15
问天何必 | 园豆:3311 (老鸟四级) | 2014-12-23 13:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册