微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VB.NET内存管理

@H_404_4@ 更新:我可能将内存使用问题与UI共享相同的线程与处理相混淆(如下面的MusiGenesis所指出的).但是关于内存使用情况.我仍然无法找到VB.net特定的语法,尽管人们已经在下面指出了一些很棒的.Net和C#信息(如果我对这些技术更精通,那么可以适应VB.net的工作).

我正在创建一个VB.Net应用程序.

>该应用程序基本上解析数据
位于客户端计算机上的文件
到DataSet / DataTables.
>然后使用
DataView,它打破了
DataTables成为可管理的块,
写入XML并将XML数据发送到
网络服务.

一般概念工作正常,但是我遇到的问题是,当程序用于加载越来越多的文件时,任务管理器上的Mem Usage不断增长.

在启动时,在做任何事情之前,VB应用程序有27,000 K.
一旦文件被解析,甚至在我处理File句柄之后,数据也会增加很多.我删除代码中的所有内容,似乎仍然捕获了Mem Usage中的内存.对于为什么Mem Usage正在增长没有押韵或理由(即,有时它在读取7mb文件时可以增长20mb,但是有时它在读取3mb文件时根本没有增加).有时,它会在解析完成时释放一些内存,而其他时候只是保留.

我看过.Net Memory Profiler并没有真正能够做到这一点.
我已经在互联网上阅读了很多关于.Net的内存管理,关于dispose和“nothing”以及DataSet等等,但是并没有真正发现任何关于VB.Net的内容.

我的一般问题是:是否有任何好的教程/书籍/博客/等显示有关管理VB.Net应用程序中的内存的更深入的教程(即如何/何时处置/关闭等),或者是否有人有一些从那里经验的具体提示.

解决方法

首先,您需要意识到任务管理器正在向您显示操作系统已分配给您的应用程序的内存量.这不一定是实际使用的内存量.当.NET应用程序首次启动时,操作系统会为其分配内存,就像对任何进程一样.然后,.NET运行时进一步划分该内存并管理它的使用方式.运行时可以被认为是“贪婪”,因为一旦操作系统分配了内存,除非操作系统特别要求,否则它不会将其返回.结果是任务管理器中的内存使用不准确.

要准确了解内存使用情况,您需要使用性能监视器并添加适当的计数器.

至于Idisposable和dispose模式,你可能不会发现很多用语言特定的术语来讨论它,因为它是由.NET Framework本身提供的并且与语言无关.无论您使用何种语言,模式都是相同的,只有语法不同.

有几个参考资料可以为您提供有关内存管理如何工作的信息.我有两个博客文章,一篇讲述Using Garbage Collection in .NET,另一篇列出了我曾经在.NET中创建两个关于内存管理的演示文稿的各种resources.

最好的“经验法则”是,如果一个类实现了Idisposable,它会出于某种原因这样做,你应该确保在完成使用实例时调用dispose().使用using语句最容易实现.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐