草庐IT

Windows 工作流运行时泄漏大量内存

以下是我的工作流程实现的概述:GUI线程启动辅助线程工作线程分析一些数据工作线程启动其他几个工作线程来处理数据这些最后的工作线程中的每一个都会创建一个工作流运行时,并且执行顺序工作流到目前为止,我一直在像这样在每个线程中创建一个新的WorkflowRuntime对象:using(WorkflowRuntimeworkflow_runtime=newWorkflowRuntime()){AutoResetEventwaitHandle=newAutoResetEvent(false);workflow_runtime.WorkflowCompleted+=delegate(objects

c++ - 如何读取 PCIe 总线上使用的带宽?

我正在开发一个在启动时将大量数据推送到显卡的流媒体应用程序。在推送数据时,CPU几乎没有做任何事情,它以接近零的使用率闲置。我想监控哪些机器在推送初始数据时遇到困难,哪些机器可以应付,以便我可以为我们的客户硬件获得最低推荐规范。我发现带有PCIe1.1x16插槽的PC难以处理通过显卡推送的初始数据。我的开发PC有一个PCIe2.0x16插槽,它可以毫无问题地处理最初推送到显卡的大量数据。我需要数字来证明(或反驳)我的观点。我想要的是能够确定:显卡在哪个插槽类型上?那个插槽的速度是多少?Gfx卡名称Gfx卡驱动版本但最重要的是,数据流经PCIe插槽-例如如果我可以证明PCIe总线的数据已

java - 我可以在 Windows 64 位平台上安全使用的最大 Java 堆大小是多少?

我们使用64位Windows2003服务器运行WebSphere/J2EE应用程序(JVM也是64位)。机器有16GB物理内存。不幸的是,我们的应用程序是内存密集型的,我们仍然需要一些时间来添加额外的内存。我了解操作系统本身需要一定数量的内存。话虽这么说,假设这是系统上运行的唯一应用程序,我们可以使用的最大堆大小是安全的(没有分页?)? 最佳答案 我认为答案将取决于许多因素,其中许多因素很难预测。IMO,确定安全最大堆大小的最实用方法是反复试验。我会从大约15Gb的最大堆大小开始,查看系统的内存/分页统计信息,然后向上或向下调整。

Java 内存和 Windows

今天注意到一些有道理的东西,但我无法准确解释语义。基本上,我创建了一个普通的旧javamain方法,其中有一个永无止境的while循环。在这个循环中,我创建了一些字符串并将它们放入HashMap中。我真正想要的是一个运行并在一段时间内建立内存利用率的进程。publicclassTest{publicstaticvoidmain(String[]args)throwsInterruptedException{finalHashMapnames=newHashMap();while(true){names.put(newDate().toString(),"lskjflksjdflksjd

c++ - 如何测试主存访问时间?

寻找一个C/C++程序来测试访问一block固定内存需要多长时间,特别是在RAM中。如何确保测试访问时间不是缓存或TLB数据?例如,我可以“禁用”所有缓存/TLB吗?或者我可以在RAM中指定一个特定的地址来只写/只读吗?另一方面,我如何确保我只测试缓存?有没有办法告诉编译器在哪里保存和读取,缓存/内存?例如,这个测试是否有一个众所周知的标准程序(inoneofthesebooks?)?我确实看到了这个但是我不明白如何调整列表的大小,你可以控制内存访问是命中一级缓存,二级缓存还是主内存:measuringlatenciesofmemory如何正确编写此测试程序?

.net - "Largest free region"的性能计数器?

我正在调试内存不足的异常。当我得到异常时,“虚拟字节”性能计数器指示有足够的​​可寻址空间。然而,问题在于可寻址空间碎片化严重,并且“最大空闲区域”(从WinDbg中的!address返回)太小。为了测量内存碎片,我想在perfmon中监控“最大空闲区域”。是否有一个性能计数器可以给我这个值? 最佳答案 我不相信这条信息有一个单独的性能计数器,但可以使用VirtualQueryExWin32函数推导出来。您可以在最小有效虚拟地址(可以从GetSystemInfo获得)上调用它,然后您可以使用返回的页面范围的大小来确定下一个页面范围的

C++ 内存调试器?

谁能推荐一个高质量的C++内存调试API或适用于Windows的软件(特别是与MinGW一起使用的软件)?我几乎可以肯定我的程序中存在内存泄漏,但我不知道从哪里开始寻找。另外,在相关说明中,我之前尝试自己重载全局new和delete运算符,并从那里存储调试信息。然而,当我尝试用重载的运算符替换每次出现的new时,它会抛出一堆错误。我只尝试使用一个简单的预处理器宏来这样做。#definenewnew(__FILE__,__LINE__)是否有解决该问题的独特方法?编辑:我可能应该更清楚这一点。事实上,我确实声明了一个重载,并且没有任何错误地实现了它。唯一的问题是当我尝试使用宏来替换对ne

windows - 如何检查一个进程中可以使用的地址空间的最大内存量

如果在32位可执行文件中未指定LARGEADDRESSAWARE开关,则2GB内存(提供或占用)可供进程使用。当开关LARGEADDRESSAWARE出现在可执行文件的PE标志中时,此限制可以是(如果我错了请纠正我):如果32位Windows不是使用/3GB开关启动的,则为2GB3GB(如果32位Windows是使用/3GB开关启动的)如果该进程作为32位进程在Windows64位操作系统下运行,则几乎高达4GB。我的问题是:如何确定此内存限制(有和/或没有LARGEADDRESSAWARE标志)?作为旁注:上面列举的可能性是否正确?注意:我对进程使用的内存量不感兴趣,也不是由于外部影

c - GetProcessMemoryInfo PROCESS_MEMORY_COUNTERS_EX.PrivateUsage 始终为 0

我正在使用GetProcessMemoryInfo函数通过其PID确定进程内存使用情况。使用常规PROCESS_MEMORY_COUNTERS一切正常,但我需要PrivateUsage成员,它仅存在于扩展结构PROCESS_MEMORY_COUNTERS_EX中。有几个文档促使我强制将扩展类型转换为基本类型,否则我的示例将无法编译。我仍然能够从基本成员获取值,例如PeakWorkingSetSize,但PrivateUsage始终为0。我什至尝试重新定义PSAPI_VERSION-仍然没有。无法使用PSAPI_VERSION这是我的例子。#include#include#include

windows - 如何限制应用程序可以分配的内存

我需要一种方法来限制服务可以分配的内存量,以防止服务使系统饿死,类似于SQLServer允许您设置“最大服务器内存”的方式。我知道SetProcessWorkingSetSize并不完全符合我的要求,但我正在努力让它按照我认为应该的方式运行。无论我使用什么值,我的测试应用程序的工作集都没有限制。此外,如果我随后立即调用GetProcessWorkingSetSize,则返回的值不是我之前指定的值。这是我的测试应用程序使用的代码:varMinWorkingSet:SIZE_T;MaxWorkingSet:SIZE_T;beginifnotSetProcessWorkingSetSize(