C# 负载测试不需要';对于工作集性能计数器,不显示超过4GB的数据

C# 负载测试不需要';对于工作集性能计数器,不显示超过4GB的数据,c#,performance,performance-testing,load-testing,performancecounter,C#,Performance,Performance Testing,Load Testing,Performancecounter,我正在尝试创建一些应用程序我只想获取应用程序进程的内存使用情况。为此,我在计数器集中添加了进程/工作集 问题在于工作集性能计数器读取以字节为单位的值,并且计算的值没有超过等于4 GB的4294967296 但我的应用程序“以64位模式运行”使用的内存超过4GB 从TaskManager中可以清楚地看到,它需要大约6GB的容量,但是这个值不会出现在负载测试图中 因此,如何创建定制的,完全像进程/工作集一样,但使用千字节而不是字节,我可能会得到真实的值。或任何其他解决方案,使我能够计算我的应用程

我正在尝试创建一些应用程序我只想获取应用程序进程的内存使用情况。为此,我在计数器集中添加了
进程/工作集

问题在于
工作集
性能计数器
读取以字节为单位的值,并且计算的值没有超过等于4 GB的
4294967296

但我的应用程序“以64位模式运行”使用的内存超过4GB 从TaskManager中可以清楚地看到,它需要大约6GB的容量,但是这个值不会出现在负载测试图中


因此,如何创建定制的,完全像
进程/工作集
一样,但使用千字节而不是字节,我可能会得到真实的值。或任何其他解决方案,使我能够计算我的应用程序在负载测试中使用了多少内存。

根据以下文档:

如果计数器类型为32位大小,并且您试图将此属性设置为太大而无法容纳的值,则该属性会将该值截断为32位

所以你必须使用正确的(那些,后缀为
64
)。

我找到了一个解决方案。谢谢你的评论,所有的评论都很有帮助

第一步是正常安装新的
PerformanceCounterCategory
最重要的是将其设置为
PerformanceCounterCategory类型。多实例

e、 g

下一步是让简单的windows服务或控制台应用程序从
进程中读取每个进程的值。WorkingSet64
并将其设置为您的
性能计数器
此应用程序或服务应在您运行负载测试时运行,当然也应在x64模式下运行。 e、 g


为什么不直接取正常值的输出除以
2呢?我不是在用编程的方式读取值。我只是在负载测试中使用计数器集。您可以创建自己的计数器,以提供您想要的值。Microsoft提供了有关如何创建自定义性能计数器的页面。如果要计数超过4294967296,则程序必须作为64位进程运行。这很容易做到,右键单击EXE项目>属性>生成选项卡。取消勾选偏好32位复选框,确保平台目标是AnyCPU。这听起来很像是希望有人为您编写代码。有什么让你感到困惑的吗?没有留下任何评论就投票否决对任何人都没有用。亲爱的选民们,请你们和蔼可亲地向我解释一下你们不喜欢我的暗示的地方。谢谢
var countersToCreate = new CounterCreationDataCollection();
var memoryCounterData = new CounterCreationData("Memory Usage", "Memory Usage", PerformanceCounterType.NumberOfItems64);
countersToCreate.Add(memoryCounterData);
PerformanceCounterCategory.Create("KB Memory Usage", "KB Memory Usage", PerformanceCounterCategoryType.MultiInstance, countersToCreate);
static void Main(string[] args)
{
    while (true)
    {
        Thread.Sleep(500);
        foreach (var process in Process.GetProcesses())
        {
            var memoryUsage = new PerformanceCounter("KB Memory Usage", "Memory Usage", process.ProcessName, false);
            memoryUsage.RawValue = process.WorkingSet64/1024;
        }
    }
}