我正在创建一个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应用程序中的内存的更深入的教程(即如何/何时处置/关闭等),或者是否有人有一些从那里经验的具体提示.
解决方法
要准确了解内存使用情况,您需要使用性能监视器并添加适当的计数器.
至于Idisposable和dispose模式,你可能不会发现很多用语言特定的术语来讨论它,因为它是由.NET Framework本身提供的并且与语言无关.无论您使用何种语言,模式都是相同的,只有语法不同.
有几个参考资料可以为您提供有关内存管理如何工作的信息.我有两个博客文章,一篇讲述Using Garbage Collection in .NET,另一篇列出了我曾经在.NET中创建两个关于内存管理的演示文稿的各种resources.
最好的“经验法则”是,如果一个类实现了Idisposable,它会出于某种原因这样做,你应该确保在完成使用实例时调用dispose().使用using
语句最容易实现.