我有一个单元测试,我尝试验证我是否处理了曾经附加到主用户界面的文档。单元测试必须是异步的,因为一切都需要在 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) 我正在使用 JetBrains dotMemory 调试 .NET Web 应用程序中内存使用率过高的问题。Profiler 声称第 2 代的内存使用量非常高。然而,当我点击“获取快照”时,内存使用量立即被清除,并且我无法在快照中看到第 2 代的内容。
如何调试第二代内存?
我正在尝试使用JetBrains dotMemory来分析在IIS10上运行的ASP.NET MVC Web应用程序.当我附加到进程w3wp.exe并单击运行时出现以下错误:
无法开始分析.细节:
Profiler无法附加到进程:请确保该进程不在另一个分析器,性能监视工具,模拟工具下运行,或尝试重新启动计算机.
我没有任何其他可以运行该过程的分析器或工具.此外,尝试重新启动.然而,没有任何作用.
有什么建议?
所以,我在我接下来的一段代码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分钟左右,我收到下面的结果
该应用程序从开始10Mb到14Mb。
我看到我已经2.6GB分配了。什么?似乎一点也不好。另外,我看不到Gen1和Gen2列。这是否意味着代码没有在其中分配任何内容,所以没有任何显示?
如何解释结果?看起来完全可以DotMemory,但不能接受BenchmarkDotNet。我是新手,BenchmarkDotnet将对有关结果的任何信息有所帮助。
PS。LogicUnderTest() …