婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 深入本機(jī)影像生成器(Ngen.exe)工具使用方法詳解

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

熱門標(biāo)簽:地圖標(biāo)注和認(rèn)領(lǐng) 長春呼叫中心外呼系統(tǒng)哪家好 電銷語音自動機(jī)器人 萊蕪?fù)夂綦婁N機(jī)器人價格 凱立德導(dǎo)航官網(wǎng)地圖標(biāo)注 戶外地圖標(biāo)注軟件手機(jī)哪個好用 鄭州400電話辦理 聯(lián)通 五常地圖標(biāo)注 智能電話營銷外呼系統(tǒng)
先介紹一點(diǎn)背景知識;.Net程序在運(yùn)行時會實(shí)時(JIT)編譯,將.Net程序文件編譯成cpu認(rèn)識的匯編機(jī)器碼。實(shí)時編譯需要消耗額外的cpu和內(nèi)存資源,這對于服務(wù)器端程序是無關(guān)緊要的,因?yàn)閷?shí)時編譯只在程序第一次運(yùn)行時編譯,之后就不需要再做了;如果你在做的是一個較大的winform程序或者silverlight等客戶端程序時就需要考慮提前編譯了。
.Net framework安裝目錄下(類似C:\Windows\Microsoft.NET\Framework\v4.0.30319)有一個ngen.exe工具,就是做這件事兒的。這個程序是一個控制臺程序,最常用的使用方法如下:
生成文件filepath的native code使用下面命令:
復(fù)制代碼 代碼如下:

ngen install filepath

卸載文件filepath的native code使用下面命令
復(fù)制代碼 代碼如下:

Ngen uninstall filepath

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

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

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;
                //需要生成本機(jī)映象的程序集名字,配置在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. 最后一步是制作安裝程序,在解決方案中添加安裝項(xiàng)目


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


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

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


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

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

附件中是測試項(xiàng)目源碼。希望這篇文章有用。

標(biāo)簽:西藏 紅河 湖州 宣城 福州 衢州 岳陽 西寧

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《深入本機(jī)影像生成器(Ngen.exe)工具使用方法詳解》,本文關(guān)鍵詞  深入,本機(jī),影像,生,成器,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《深入本機(jī)影像生成器(Ngen.exe)工具使用方法詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于深入本機(jī)影像生成器(Ngen.exe)工具使用方法詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 宁明县| 屯门区| 古交市| 灌阳县| 思茅市| 兴安县| 大安市| 乐业县| 娱乐| 仙游县| 阳高县| 镇远县| 阿拉善盟| 延川县| 广水市| 岑巩县| 天长市| 丰都县| 祁东县| 都安| 囊谦县| 宽甸| 通城县| 岳阳县| 陵川县| 广平县| 微博| 个旧市| 平谷区| 利津县| 革吉县| 赞皇县| 青浦区| 武城县| 揭东县| 阳西县| 徐州市| 宁城县| 闻喜县| 黎川县| 隆化县|