标签:c memory-management net windows-ce
我有一个由多个组件组成的应用程序,每个组件编译成单个DLL,每个组件本身都运行多个线程.我有一个启动这些组件的shell程序.
我在CE 6环境中运行此应用程序,这是唯一的程序(除了系统之外).但是,随着时间的推移,当我查看任务管理器窗口时,我看到分配的内存使用量缓慢增加.怀疑我的程序可能有内存泄漏我执行以下操作.
我转到一个特定的组件并创建一个Timer对象,该对象每30分钟运行一次,调用以下代码:
long memByte = GC.GetTotalMemory(false);
Console.Write("Heap Memory: " + (memByte/1000).ToString() + "KB");
通过在互联网上阅读,我认为GetTotalMemory基本上给了我系统的总管理内存.如果我的程序没有内存泄漏问题,那么我怀疑加班时,当我绘制出结果时,我会得到某种类型的扁平线.否则我会看到缓慢增加.
我的问题是,GetTotalMemory实际上是否给了我所有应用程序的总管理堆内存,还是只给出了运行此代码的当前组件正在使用的特定堆?
谢谢,
解决方法:
任务管理器向您显示GC.GetTotalMEmory的不同信息.很有可能制作一个具有平坦线条的GC.GetTotalMemory的应用程序,但会慢慢运行设备内存和崩溃.
GC.GetTotalMemory只查看GC堆,而不是分配的虚拟或物理内存. GCHeap之外的P / Invokes和本地分配对GC.GetTotalMemory调用是透明的,这就是为什么尝试确定你是否实际泄漏是一个相当无用的调用.
GC堆可以有时增长和/或缩小,而不需要对操作系统内存管理器进行任何调用,事实上它很常见. GC一次从操作系统中获取大块,然后将其分成较小的块,因为应用程序需要GC堆内存.
P/Invoke GlobalMemoryStatus如果要跟踪在设备的控制面板中看到的实际操作系统分配.
标签:c,memory-management,net,windows-ce 来源: https://codeday.me/bug/20190630/1331957.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。