千家信息网

VB.NET内存占用的解决方法

发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,本篇文章为大家展示了VB.NET内存占用的解决方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。VB.NET为我们带来了许多新的应用方式和代码编写方式,在一定
千家信息网最后更新 2024年11月18日VB.NET内存占用的解决方法

本篇文章为大家展示了VB.NET内存占用的解决方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

VB.NET为我们带来了许多新的应用方式和代码编写方式,在一定程度上大大提高了编程人员的编程效率。而且其应用方式多样化,灵活性等特点大大吸引着开发人员。

VB.NET内存占用方法一:将窗体隐藏或者最小化启动

下列VB.NET 2005代码片断通过窗体变量m_IsHide来控制是否将窗体最小化并隐藏,初始化为True。

为了运行下列代码,还需要一个NotifyIcon及一个与之关联的ContextMenuStrip,后者包含mnuShow和mnuHide菜单两枚。

  1. Private m_IsHide As Boolean = True

  2. Private Sub frmMain_Activated() Sub
    frmMain_Activated(ByVal sender As
    Object, ByVal e As System.EventArgs)
    Handles Me.Activated

  3. If m_IsHide Then

  4. Me.WindowState = FormWindowState.
    Minimized

  5. Me.Hide()

  6. Else

  7. Me.WindowState = FormWindowState.
    Normal

  8. Me.Show()

  9. End If

  10. End Sub

  11. Private Sub frmMain_Resize() Sub
    frmMain_Resize(ByVal sender As Object,
    ByVal e As System.EventArgs)
    Handles Me.Resize

  12. If Me.WindowState = FormWindowState.
    Minimized Then

  13. m_IsHide = True

  14. Me.Hide()

  15. End If

  16. End Sub

  17. Private Sub mnuShow_Click() Sub
    mnuShow_Click(ByVal sender As
    System.Object, ByVal e As System.
    EventArgs) Handles mnuShow.Click

  18. m_IsHide = False

  19. Me.WindowState = FormWindowState.Normal

  20. Me.Show()

  21. End Sub

  22. Private Sub mnuHide_Click() Sub
    mnuHide_Click(ByVal sender As System.
    Object, ByVal e As System.EventArgs)
    Handles mnuHide.Click

  23. m_IsHide = True

  24. Me.WindowState = FormWindowState.Minimized

  25. Me.Hide()

  26. End Sub

上述代码的功能是:

  • VB.NET可执行语句示例代码解读

  • VB.NET创建过程相关步骤详解

  • 如何对VB.NET流进行正确操作

  • 两种VB.NET发送邮件方法解读

  • VB.NET调用WinAPI实例探讨

1、 启动时最小化并隐藏

2、 点击mnuHide窗体隐藏

3、 点击mnuShow窗体恢复

4、 最小化时窗体隐藏

一句话,其实就是编程使窗体启动时最小化。

VB.NET内存占用方法二:Windows将程序占用的内存倒入虚拟内存可以造成小内存占用的假象。

乐天居上有篇文章"将物理内存的占用挪到虚拟内存里-----揭密篇 "对此有完整的介绍:"而是操作系统本身就有这个机制,即当程序不使用时(最小化),操作系统会调用某些命令,来将该程序占用的内存移至虚拟内存,只保留一小部分常规代码"

BOOL SetProcessWorkingSetSize(  HANDLE hProcess,  SIZE_T dwMinimumWorkingSetSize,  SIZE_T dwMaximumWorkingSetSize  );

"将 2个 SIZE_T 参数设置为 -1 ,即可以使进程使用的内存交换到虚拟内存,只保留一小部分代码。

事实上,使用该函数并不能提高什么性能,也不会真的节省内存。因为他只是暂时的将应用程序占用的内存移至虚拟内存,一旦,应用程序被激活或者有操作请求时,这些内存又会被重新占用。如果你强制使用该方法来 设置程序占用的内存,那么可能在一定程度上反而会降低系统性能,因为系统需要频繁的进行内存和硬盘间的页面交换。"

给出我在vb2005中的使用范例:

  1. Imports System.Runtime.InteropServices

  2. Module modMain Module modMain

  3. < DllImport("kernel32.dll")> _

  4. Public Function SetProcessWorkingSetSize()
    Function SetProcessWorkingSetSize( _

  5. ByVal hProcess As Integer, _

  6. ByVal dwMinimumWorkingSetSize As Integer, _

  7. ByVal dwMaximumWorkingSetSize As Integer) _

  8. As Integer

  9. End Function

  10. < DllImport("kernel32.dll")> _

  11. Public Function GetCurrentProcess()
    Function GetCurrentProcess() As Integer

  12. End Function

  13. Public Sub ReduceMem() Sub ReduceMem()

  14. SetProcessWorkingSetSize(GetCurrentProcess, -1, -1)

  15. End Sub

  16. End Module

使用ReduceMem()函数的效果很赞,但是不建议经常用,我只是在FormLoad时用一下,效果就很好了。

值得一提的是,如果不使用GetCurrentProcess()函数得到当前Process,而是使用Process.GetCurrentProcess(),则无法有效缩减使用内存。

上述内容就是VB.NET内存占用的解决方法,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

0