为什么 .NET 应用程序至少有一秒的启动延迟?

问题描述 投票:0回答:1

我正在寻找一种具有以下参数的语言:

  1. 简单易读的语法。

  2. 能够轻松创建 Windows 用户界面。

  3. 对 Windows 应用程序的本机支持。

  4. 卓越的性能和快速的启动时间。

  5. 可移植性,无需大量安装,例如 10-20 GB Visual Studio IDE。

  6. 它应该已经被广泛使用并拥有大量社区。

我发现VB6满足了我的需求,但不幸的是,它不再被支持。因此,我尝试了VB .NET。我发现转换非常容易,而且与 C#/C++ 相比,VB 代码更具可读性和简洁性。正如我所提到的,我不想安装任何东西,所以我没有尝试 .NET 6 和 7。我的目标是尽可能利用

vbc.exe
等内置工具或便携式工具。然而,.NET 框架的问题在于,无论代码的重要性或使用的语言(VB 或 C#)如何,启动时间始终保持在 1-2 秒之间。相比之下,VB6 应用程序会立即启动。下面是一个用 VB .NET 编写的示例:

Imports System.Windows.Forms
Imports System.Drawing

Public Class Form1
    Inherits Form

    Private WithEvents button As New Button()
    Private WithEvents textBox As New TextBox()

    Public Sub New()
        button.Text = "Browse"
        button.Location = New Point(10, 10)
        Me.Controls.Add(button)

        textBox.Location = New Point(10, 40)
        Me.Controls.Add(textBox)
    End Sub
End Class

Module Module1
    Sub Main()
        Application.Run(New Form1)
    End Sub
End Module

我做了什么:

1.

CD C:\Windows\Microsoft.NET\Framework64\v4.0.30319 
NGEN update
  1. 我尝试了

    vbc.exe
    (和
    csc.exe
    )编译器的各种选项,例如
    /optimize[+|-]
    /platform

  2. 不同版本的.NET框架(32位和64位),包括版本2、3.5和4.x.x.

  3. 使用

    msbuild.exe
    使用以下命令编译我的应用程序:

msbuild /property:Configuration=Release;UseDotNetNativeToolchain=true MyFile.vbproj
,

这是 MyFile.vbproj 的内容:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" Sdk="Microsoft.NET.Sdk" >
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
  </PropertyGroup>

  <ItemGroup>
    <Compile Include="DiCalc.vb" />
  </ItemGroup>

<Target Name="Build">
  <Vbc Sources="@(Compile)" OutputAssembly="DiCalc.exe" TargetType="WinExe"/>
</Target>


</Project>

提前致谢。

.net windows vb.net vb6 vbc
1个回答
0
投票

首先,我的 vb.net 应用程序在启动时都没有表现出这样的延迟。

如果您创建 vb.net windows .net 框架表单应用程序,则启动时间不会显示任何延迟,甚至没有明显的启动延迟。

那么,让我们打个招呼吧:

文件->新项目。

这个:

因此,让我们构建 hello world 类示例。

我们在表单上拖动一个按钮,从而编写以下代码:

然后 f5 运行..

(实际上,我们使用鼠标并点击开始按钮)。

我们看到了这一点,并且看到很少的延迟:

当然,我们从 Visual Studio 运行它,但让我们右键单击该项目,选择“在资源管理器中打开文件夹”,然后从 Windows 资源管理器运行 .exe 文件(不是从 Visual Studio 运行/启动)。

所以,我们现在有了这个文件夹,当我单击 .exe 文件时,我没有看到 2 秒的等待,也没有看到 1 秒的等待,事实上,表单在没有任何感知延迟的情况下启动全部。

所以,我看到了这个:

现在,我使用 screen to gif,它以每秒 15 帧的速度运行,所以你看到的比在你自己的计算机上执行此操作“有些慢”。

但是,当我单击 .exe 文件时,screentogif(我使用的屏幕捕获软件)确实显示了一个圆圈。我没有计算捕获的帧数,但看起来不超过 1-2 帧。

换句话说,我们加载和运行该 .exe 文件的时间远低于 1/10 秒……

即使我使用 .net core 创建上述相同的项目,我也看不到也找不到任何明显的延迟。

所以,我不知道 .net 有一些大的延迟或启动时间,而且它真的不需要看起来与 VB6 .exe 的启动时间有任何不同。

这表明这里还存在其他一些问题,例如病毒软件扫描并在没有运行病毒扫描软件并检查该 .exe 文件的情况下阻止 .exe 启动。

或者,有一些网络文件夹或其他一些重要细节您没有与我们分享。

事实上,如上所示,从 Visual Studio 2022 中按 f5 甚至不需要 2 秒。但是,来自给定项目的编译后的 .exe 文件肯定会启动,并在一秒钟内运行。

请记住,我是在笔记本电脑上运行它,而不是高端规格的笔记本电脑,更不用说更好、更强大的台式电脑了。

© www.soinside.com 2019 - 2024. All rights reserved.