亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

深入本機影像生成器(Ngen.exe)工具使用方法詳解

2024-07-10 13:16:09
字體:
來源:轉載
供稿:網友
先介紹一點背景知識;.Net程序在運行時會實時(JIT)編譯,將.Net程序文件編譯成cpu認識的匯編機器碼。實時編譯需要消耗額外的cpu和內存資源,這對于服務器端程序是無關緊要的,因為實時編譯只在程序第一次運行時編譯,之后就不需要再做了;如果你在做的是一個較大的winform程序或者silverlight等客戶端程序時就需要考慮提前編譯了。
.Net framework安裝目錄下(類似C:/Windows/Microsoft.NET/Framework/v4.0.30319)有一個ngen.exe工具,就是做這件事兒的。這個程序是一個控制臺程序,最常用的使用方法如下:
生成文件filepath的native code使用下面命令:

復制代碼 代碼如下:


ngen install filepath


卸載文件filepath的native code使用下面命令

復制代碼 代碼如下:


Ngen uninstall filepath


本文主要就用這兩種用法,有關這個工具更多的參數和介紹,請參考msdn。
客戶端程序我們必然要制作安裝包,我的思路是在安裝程序時就做本機映象的生成操作;我們可以在安裝程序中添加一步自定義操作來做這件事情。
如果你對本文的話題感興趣,不妨按照下面步驟試一下。
1. 新建解決方案,名字隨意
2. 在新解決方案中添加一個winform項目,假定我們要對這個winform項目生成的可執行文件做本機映象生成操作;這只是一個演示,所以這個項目什么都不做
3. 在這個解決方案中添加一個名字為NgenInstaller的類庫項目,并新建一個Installer Class;

深入本機影像生成器(Ngen.exe)工具使用方法詳解

在新建的NgenInstaller類中添加在安裝時使用ngen安裝程序的功能代碼。
4. 代碼實現很簡單就是使用Process執行ngen程序來完成安裝。需要注意的時,具體讓ngen安裝那些文件時通過Context.Parameters[“ngen1|2|3”]傳進來的,這個參數需要在制作安裝包的自定義步驟中設置。
實現代碼:

復制代碼 代碼如下:


using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Linq;
using System.Runtime.InteropServices;
using System.IO;
using System.Diagnostics;

 
namespace NgenInstaller
{
    [RunInstaller(true)]
    public partial class NgenInstaller : System.Configuration.Install.Installer
    {
        public NgenInstaller()
        {
            InitializeComponent();
        }

        public override void Install(IDictionary stateSaver)
        {
            NgenFile(InstallTypes.Install);
        }

 
        public override void Uninstall(IDictionary savedState)
        {
            NgenFile(InstallTypes.Uninstall);
        }

        private enum InstallTypes
        {
            Install,
            Uninstall
        }

        private void NgenFile(InstallTypes options)
        {
            string envDir = RuntimeEnvironment.GetRuntimeDirectory();
            string ngenPath = Path.Combine(envDir, "ngen.exe");
            string exePath = Context.Parameters["assemblypath"];            
            string appDir = Path.GetDirectoryName(exePath);

            int i = 1;

            do {
                string fileKey = "ngen" + i;
                //需要生成本機映象的程序集名字,配置在ngen1...5,6的配置中
                if (Context.Parameters.ContainsKey(fileKey))
                {
                    string ngenFileName = Context.Parameters["ngen" + i];
                    string fileFullName = Path.Combine(appDir, ngenFileName);
                    string argument = (options == InstallTypes.Install ? "install" : "uninstall") + " /"" + fileFullName + "/"";

                    Process ngenProcess = new Process();
                    ngenProcess.StartInfo.FileName = ngenPath;
                    ngenProcess.StartInfo.Arguments = argument;
                    ngenProcess.StartInfo.CreateNoWindow = true;
                    ngenProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                    ngenProcess.Start();

                    ngenProcess.WaitForExit();
                    i++;
                }
                else {
                    break;
                }
            }
            while (true);
        }
    }
}


這個類庫中只有這一個類,完成我們要的操作
5. 最后一步是制作安裝程序,在解決方案中添加安裝項目

深入本機影像生成器(Ngen.exe)工具使用方法詳解


添加安裝程序之后右擊安裝項目添加項目輸出,如下圖所示

深入本機影像生成器(Ngen.exe)工具使用方法詳解


在添加項目輸出的對話框中選擇Winforms項目和剛建的類庫。
然后右擊安裝項目選擇視圖---自定操作打開自定義操作窗口,添加一個名字為“Ngen生成本機映象”的自定義操作,在添加操作時要選擇NgenInstaller項目輸出 如下圖:

深入本機影像生成器(Ngen.exe)工具使用方法詳解

然后將自定義操作的名字修改為“Ngen生成本機代碼”,如下圖所示

深入本機影像生成器(Ngen.exe)工具使用方法詳解


然后右擊新建的自定義操作,選擇屬性窗口,在屬性窗口的CustomActionData屬性中添加需要操作的程序集,注意CustomActionData是一個鍵值對,每個鍵值對以/開始

深入本機影像生成器(Ngen.exe)工具使用方法詳解

完成這一步就差不多了,你可以編譯一下整個解決方案。運行安裝項目生成的安裝包。
6. 運行安裝包,如果一切正常的話就做了本機映象生成了,可以通過ngen display filePath命令來驗證native本機影響是否安裝正常,如下命令行輸出

深入本機影像生成器(Ngen.exe)工具使用方法詳解

附件中是測試項目源碼。希望這篇文章有用。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品国产乱码久久久久久久久| 久久久久久久一区二区三区| 亚洲tv在线观看| 亚洲第一黄色网| 午夜精品久久久久久久99热浪潮| 欧美激情2020午夜免费观看| 欧美视频裸体精品| 51色欧美片视频在线观看| 疯狂做受xxxx高潮欧美日本| 最近免费中文字幕视频2019| 亚洲天堂av女优| 亚洲天堂男人的天堂| 色老头一区二区三区| 亚洲精品大尺度| 国产一区二区av| 77777亚洲午夜久久多人| 日韩有码在线播放| 国产精品一区二区久久精品| 日韩精品免费一线在线观看| 国产精品永久免费观看| 国产成人亚洲综合91| 日韩精品免费综合视频在线播放| 欧美日韩国产91| 欧美成人免费在线视频| 在线丨暗呦小u女国产精品| 91精品国产色综合久久不卡98口| 亚洲成色777777女色窝| 欧美日韩国产一区二区| 国产成人精品视频| 日韩av中文字幕在线| 成人黄色激情网| 黑人狂躁日本妞一区二区三区| 97超碰蝌蚪网人人做人人爽| 九九综合九九综合| 欧美精品情趣视频| 午夜美女久久久久爽久久| 欧美老女人xx| 久久精品免费电影| 26uuu另类亚洲欧美日本一| 国产在线精品播放| 96sao精品视频在线观看| 欧美日韩国产中文精品字幕自在自线| 国产精品7m视频| 久久久精品久久| 日韩中文字幕av| 国产精品91在线| 国产区亚洲区欧美区| 欧洲成人在线观看| 日韩精品视频在线免费观看| 成人两性免费视频| 国产精品白丝jk喷水视频一区| 成人h片在线播放免费网站| 国产精品久久久久秋霞鲁丝| 欧美放荡办公室videos4k| 精品久久久中文| 91中文字幕在线观看| 国产性色av一区二区| 日韩精品免费视频| 热re91久久精品国99热蜜臀| 欧美老妇交乱视频| 欧美成人精品三级在线观看| 91av在线免费观看视频| 国产99视频精品免视看7| 亚洲91av视频| 亚洲国产精品va| 在线观看国产精品日韩av| 国产欧美日韩丝袜精品一区| 国产在线日韩在线| 97免费在线视频| 亚洲黄色在线看| 欧美日韩在线视频首页| 久热精品视频在线观看| 91精品国产网站| 国产美女扒开尿口久久久| 九九视频直播综合网| 欧美在线视频网| 成人午夜在线影院| 91丝袜美腿美女视频网站| 精品女厕一区二区三区| 国产精品中文久久久久久久| 一区二区三区视频免费| 日韩电影中文字幕在线观看| 欧美激情视频在线| 亚洲欧洲日本专区| 亚洲a一级视频| 国产精品久久久久久久久久尿| 亚洲久久久久久久久久| 中文字幕一精品亚洲无线一区| 中文字幕亚洲第一| 久久这里有精品视频| 亚洲国产精品视频在线观看| www亚洲欧美| 亚洲性猛交xxxxwww| 欧美专区中文字幕| 亚洲高清在线观看| 久久成年人免费电影| 亚洲国产精品电影在线观看| 亚洲男人第一av网站| 国产精品久久二区| 91产国在线观看动作片喷水| 成人免费黄色网| 日韩一区在线视频| 国产精品美女久久久久av超清| 日韩av综合网| 欧美理论片在线观看| 亚洲女成人图区| 清纯唯美亚洲激情| 欧美精品video| 成人在线播放av| 青青久久av北条麻妃黑人| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美性生交xxxxxdddd| 91在线无精精品一区二区| 国产精品三级网站| 亚洲电影在线看| 高清一区二区三区日本久| 岛国av一区二区| 久久精品国产精品亚洲| 欧美高清电影在线看| 国产精品欧美在线| 91亚洲精品久久久| 国产精品久久77777| 中文字幕日韩av| 久久精品色欧美aⅴ一区二区| 成人av.网址在线网站| 亚洲激情电影中文字幕| 欧美性做爰毛片| 国产女同一区二区| 午夜精品久久久99热福利| 日韩精品中文字幕有码专区| 日韩欧美在线一区| 黑人欧美xxxx| 51久久精品夜色国产麻豆| 亚洲精品国产精品自产a区红杏吧| 国产精品久久久久久久久久久久久| 狠狠做深爱婷婷久久综合一区| 国产亚洲精品久久久久动| 久久人人爽人人| 欧美黄色免费网站| 青青草99啪国产免费| 国产精品影院在线观看| 亚洲精品视频在线观看视频| 国产女人18毛片水18精品| 国产精品入口免费视| 亚洲欧美一区二区三区在线| 久久综合伊人77777尤物| www.久久色.com| 欧美高跟鞋交xxxxxhd| 国产精品成人一区二区三区吃奶| 久久精品亚洲一区| 成人精品视频在线| 国产成人极品视频| 国产精品视频26uuu| 欧美激情视频网址| 成人黄色免费片| 成人羞羞国产免费| 成人黄色在线免费| 最近2019中文免费高清视频观看www99| 亚洲日韩中文字幕| 中文日韩在线视频| 夜夜嗨av一区二区三区四区| 亚洲片在线资源| 91在线中文字幕| 久久久久久久久久国产精品|