VB.NET内存占用解决方法介绍

开发 后端
通过不断的实践,积累下来的经验告诉我们,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 

上述代码的功能是:#t#

1、 启动时最小化并隐藏

2、 点击mnuHide窗体隐藏

3、 点击mnuShow窗体恢复

4、 最小化时窗体隐藏

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

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

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

 

  1. BOOL SetProcessWorkingSetSize(  
  2. HANDLE hProcess,  
  3. SIZE_T dwMinimumWorkingSetSize,  
  4. SIZE_T dwMaximumWorkingSetSize  
  5. ); 

 

“将 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内存占用的具体解决方案。

责任编辑:曹凯 来源: wewill.cn
相关推荐

2010-01-18 17:15:20

VB.NET参数类型不

2010-01-22 10:41:33

VB.NET声明结构

2009-11-10 12:42:47

VB.NET Prin

2010-01-07 15:25:11

VB.NET数组

2009-10-29 10:04:57

VB.NET Read

2010-01-08 13:35:35

VB.NET写Log方

2010-01-21 17:58:40

VB.NET List

2010-01-15 19:17:23

2010-01-15 18:12:28

VB.NET超链接

2010-01-08 14:22:00

VB.NET精度问题

2010-01-15 10:56:50

VB.NET继承实现多

2010-01-07 18:17:00

VB.NET连接SAP

2010-01-07 16:51:56

VB.NET窗体钩子

2010-01-20 17:47:54

VB.NET注释

2009-10-28 09:55:29

VB.NET MyCl

2010-01-18 14:35:11

VB.NET读取内存

2010-01-18 17:09:52

VB.NET创建虚拟目

2009-10-23 17:22:48

VB.NET编程

2010-01-08 14:14:27

VB.NET使用Fin

2010-01-15 15:26:46

VB.NET自定义类型
点赞
收藏

51CTO技术栈公众号