标签: dotmemory

我在结合 dotMemory、xUnit 和 async 时做错了吗

我有一个单元测试,我尝试验证我是否处理了曾经附加到主用户界面的文档。单元测试必须是异步的,因为一切都需要在 STA 线程下运行,我必须等待创建的用户界面。

我有一个助手可以将操作分派到 STA 线程上。

我在测试的主体中创建内存对象,然后将其传递给异步方法,如下所示。

查看用###注释的代码行以查看实际问题行。dotMemory 报告该对象尚不存在,但我已经断言证明该对象确实存在。

(STA Helper 类可以在https://gist.github.com/bradphelan/cb4f484fbf6a7f9829de0dd52036fd63找到)

这是与 async 和 dotMemory 有关的问题吗?

    [Collection("Memory leaks")]
public class MemLeakSpec
{
    public MemLeakSpec(ITestOutputHelper output)
    {
        DotMemoryUnitTestOutput.SetOutputMethod(output.WriteLine);
    }

    [Fact]
    [DotMemoryUnit(FailIfRunWithoutSupport = true)]
    public void ShouldCollectProjectX()
    {
        dotMemory.Check (memory => { STAThread.Run(() => ShouldCollectProjectAsyncX(memory)).Wait(); });
    }

    class Document { }

    class Container { public Document Document; };

    Document CreateFoo() => new Document();

    private async Task ShouldCollectProjectAsyncX(Memory memory)
    {
        await Task.Delay(TimeSpan.FromMilliseconds(50));

        Container container = new …
Run Code Online (Sandbox Code Playgroud)

c# xunit async-await dotmemory

6
推荐指数
1
解决办法
627
查看次数

当我使用 dotMemory 在 .NET 中获取快照后,第 2 代内存就会被清除

我正在使用 JetBrains dotMemory 调试 .NET Web 应用程序中内存使用率过高的问题。Profiler 声称第 2 代的内存使用量非常高。然而,当我点击“获取快照”时,内存使用量立即被清除,并且我无法在快照中看到第 2 代的内容。

如何调试第二代内存?

c# dotmemory

5
推荐指数
1
解决办法
676
查看次数

无法使用dotMemory启动内存分析

我正在尝试使用JetBrains dotMemory来分析在IIS10上运行的ASP.NET MVC Web应用程序.当我附加到进程w3wp.exe并单击运行时出现以下错误:

无法开始分析.细节:

Profiler无法附加到进程:请确保该进程不在另一个分析器,性能监视工具,模拟工具下运行,或尝试重新启动计算机.

我没有任何其他可以运行该过程的分析器或工具.此外,尝试重新启动.然而,没有任何作用.

有什么建议?

asp.net iis jetbrains-ide w3wp dotmemory

4
推荐指数
1
解决办法
1374
查看次数

如何解释BenchmarkDotNet和dotMemory的结果?

所以,我在我接下来的一段代码Main()方法

for (int x = 0; x < 100; x++) // to mimic BenchmarkDotnet runs
   for (int y = 0; y < 10000; y++)
     LogicUnderTest();
Run Code Online (Sandbox Code Playgroud)

接下来,我正在测试以下课程

[MemoryDiagnoser, ShortRunJob]
public class TestBenchmark
{
    [Benchmark]
    public void Test_1()
    {
        for (int i = 0; i < 10000; i++)
            LogicUnderTest();
    }
}
Run Code Online (Sandbox Code Playgroud)

运行后Main()dotMemory了6分钟左右,我收到下面的结果

在此处输入图片说明

该应用程序从开始10Mb14Mb

但是当我进行BenchmarkDotnet测试时我得到了 在此处输入图片说明

我看到我已经2.6GB分配了。什么?似乎一点也不好。另外,我看不到Gen1Gen2列。这是否意味着代码没有在其中分配任何内容,所以没有任何显示?

如何解释结果?看起来完全可以DotMemory,但不能接受BenchmarkDotNet。我是新手,BenchmarkDotnet将对有关结果的任何信息有所帮助。

PS。LogicUnderTest() …

.net c# benchmarking benchmarkdotnet dotmemory

3
推荐指数
2
解决办法
426
查看次数