小编fox*_*nna的帖子

该应用程序调用了一个为不同线程编组的接口.(来自HRESULT的异常:0x8001010E(RPC_E_WRONG_THREAD))

在我的Windows Phone 8.1应用程序中,我有一个单件服务DataService,应该偶尔下载一些数据.同时在UI上我应该显示收到的数据量.当用户登录应用程序时,将调用DataService.StartGettingData():

void StartGettingData()
{
    if (getDataTaskCancellationTokenSource != null)
        getDataTaskCancellationTokenSource.Cancel();

    getDataTaskCancellationTokenSource = new CancellationTokenSource();
    var token = getDataTaskCancellationTokenSource.Token;

    Task.Factory.StartNew(async () => await ExecuteCycleAsync(token), token);
}

async Task ExecuteCycleAsync(CancellationToken cancellationToken)
{
    while (true)
    {
        cancellationToken.ThrowIfCancellationRequested();
        await LoadDataAsync(cancellationToken);
        cancellationToken.ThrowIfCancellationRequested();
        await Task.Delay(timeTillNextDownload, cancellationToken);
    }
}
Run Code Online (Sandbox Code Playgroud)

当用户在帮助下注销时,此任务将被取消

if (getDataTaskCancellationTokenSource != null)
    getDataTaskCancellationTokenSource.Cancel();
Run Code Online (Sandbox Code Playgroud)

包含下载结果的属性如下所示:

List<DataType> Data = new List<DataType>();
public IEnumerable<DataType> Data
{
    get { return Data; }
    set
    {
        Data = value.ToList();
        OnDataUpdated();
    }
}

void OnDataUpdated()
{
    var handler = DataUpdated;
    if …
Run Code Online (Sandbox Code Playgroud)

c# multithreading async-await windows-phone-8.1

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

DI容器泄漏内存或BenchmarksDotNet MemoryDiagnoser提供不准确的测量?

介绍

我们正试图捕获潜在的内存泄漏BenchmarksDotNet.

为了简单的例子,这里是一个简单的TestClass:

public class TestClass 
{
    private readonly string _eventName;

    public TestClass(string eventName)
    {
        _eventName = eventName;
    }

    public void TestMethod() =>
        Console.Write($@"{_eventName} ");
}
Run Code Online (Sandbox Code Playgroud)

我们正在通过NUnit测试实现基准测试netcoreapp2.0:

[TestFixture]
[MemoryDiagnoser]
public class TestBenchmarks
{
    [Test]
    public void RunTestBenchmarks() =>
        BenchmarkRunner.Run<TestBenchmarks>(new BenchmarksConfig());

    [Benchmark]
    public void TestBenchmark1() =>
        CreateTestClass("Test");

    private void CreateTestClass(string eventName)
    {
        var testClass = new TestClass(eventName);
        testClass.TestMethod();
    }
}
Run Code Online (Sandbox Code Playgroud)

测试输出包含以下摘要:

         Method | Mean | Error | Allocated |
--------------- |-----:|------:|----------:|
 TestBenchmark1 |   NA | …
Run Code Online (Sandbox Code Playgroud)

memory-leaks autofac tinyioc benchmarkdotnet

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