c# new class 实例与调用方法之间的内存差异

memory difference between c# new class instance vs calling method

我正在我的 C# 应用程序中构建一个日志系统。目前我有一个日志记录方法,我调用它写入日志文件。例如

Log("Hello World");

我想做的是写一个 class 而不是每次我想记录一些东西时实例化,然后构造函数写入日志文件。例如

new WriteLog {Message="Hello World"};

这样做的原因是参数更灵活。

但是我想知道每次记录内容时实例化 class 是否比调用该方法需要更多的内存成本。我实例化的每个 class 是否都保留在内存中?

它们暂时会保留下来,但会被垃圾收集器及时删除。无论如何,除非你在短时间内进行了非常多的调用,否则这不会对内存产生任何更大的影响。

不过我确实质疑 class 这是否是一个很好的用法。正如我所见,您正在误用构造函数,我认为它不适用于您的代码。构造函数应该启动数据,而不是执行诸如日志数据之类的操作。同样在您的示例中,在您分配属性之前调用构造函数。

我认为真正的问题是为什么你觉得 class 在参数上更灵活。

难道你没试过named arguments and optional arguments。这可能是您想要查找的内容。

您可以创建一个记录器的扩展class,您可以在项目中使用记录器来记录异常或信息。

示例代码

public static class LoggerExtensions
{
    public static void LogCustomError(this ILogger logger, string message, params object[] args) => logger.LogError(message, args);
    public static void LogCustomError(this ILogger logger, Exception exception, string message, params object[] args) => logger.LogException(exception, message, args);

}

使用

public class TestClass : ITestClass
{
private readonly ILogger<ITestClass> _logger;

public TestClass(ILogger<TestClass> logger)
{
    _logger = logger;
}

public voidTesMethod()
{
    try
    {

    }
    catch (Exception ex)
    {
        _logger.LogException(ex, "Got error");
    }
}

}