小编jok*_*okr的帖子

GoogleMock 在 Linux 上不是线程安全的吗?

我开始在 Windows 上测试 GoogleMock(1.8.0 版本)。我想展示一个例子,它不是线程安全的。在成功证明之后,我想证明同样的测试在 Linux 上运行良好。然而那失败了。这与我的期望不符。由于 GoogleMock 文档说它在具有 pthreads 的系统上是或应该是线程安全的,因此它在 Linux 上应该是线程安全的。我确实必须添加-pthread到链接器命令行来构建可执行文件。这意味着 GoogleMock 或 GoogleTest 确实使用 pthreads。

这是我用于测试的代码:

#include <thread>
#include <vector>

#include "gmock/gmock.h"

class Dummy
{
public:
    virtual void SomeMethod(int) {}
};

class DummyMock : public Dummy
{
public:
    MOCK_METHOD1(SomeMethod, void(int));
};

using ::testing::Exactly;

constexpr static int nrCallsPerThread = 100 * 1000;
constexpr static int nrThreads = 10;

TEST(SomeTest, Test100)
{
    DummyMock dummy;

    std::vector<std::thread> threads;
    for (int i = 0; i < nrThreads; i++)
    {
        EXPECT_CALL(dummy, …
Run Code Online (Sandbox Code Playgroud)

c++ linux multithreading visual-studio googlemock

3
推荐指数
1
解决办法
2184
查看次数

为什么 GetService 创建的对象不会被破坏?

我正在编写一个针对 dotnet core 框架 3.1 的应用程序。我使用依赖注入来配置数据库上下文等。在我的 Program.cs 中,我有以下代码:

var host = new HostBuilder()
    .ConfigureHostConfiguration(cfgHost =>
    {
        ...
    })
    .ConfigureAppConfiguration((hostContext, configApp) =>
    {
        ....
    })
    .ConfigureServices((hostContext, services) =>
    {
        ...
        services.AddDbContext<MyHomeContext>(options =>
        {
            options.UseNpgsql(hostContext.Configuration.GetConnectionString("DbContext"));
        }, ServiceLifetime.Transient);
        ...
    })
    .ConfigureLogging((hostContext, logging) =>
    {
        ...    
    })
    .Build();

Run Code Online (Sandbox Code Playgroud)

我转到host另一个班级。在另一个类中,作为较长方法的一部分,我有以下代码:

    using (var context = Host.Services.GetService(typeof(MyHomeContext)) as MyHomeContext)
    {
        StatusValues = context.Status.ToDictionary(kvp => kvp.Name, kvp => kvp.Id);
    }
    GC.Collect();
    GC.Collect();

Run Code Online (Sandbox Code Playgroud)

这些GC.Collect电话是出于测试/调查目的。在MyHomeContextI 中,出于测试目的,实现了析构函数和 Dispose() 的重写。Dispose() 被调用,但析构函数永远不会被调用。这会导致我创建的每个实例出现内存泄漏MyHomeContext

我缺少什么?MyHomeContext我可以做什么来确保当我不再需要它时删除它的实例。 …

c# memory-leaks dependency-injection microsoft.extensions.hosting

2
推荐指数
1
解决办法
1890
查看次数