gpt4 book ai didi

c# - 关于C#中有效日志记录的问题

转载 作者:太空狗 更新时间:2023-10-30 00:17:18 25 4
gpt4 key购买 nike

我编写了一个简单的调试类,并在我的代码中调用方法 Debugger.WriteLine(...),如下所示:

Debugger.WriteLine("[Draw]", "InProgress",
"[x,y] = " + x.ToString("0.00") +
", " + y.ToString("0.00") +
"; pos = " + lastPosX.ToString() + "x" +
lastPosY.ToString() + " -> " + posX.ToString() +
"x" + posY.ToString() + "; SS = " +
squareSize.ToString() + "; MST = " +
startTime.ToString("0.000") + "; Time = " + time.ToString() +
phase.ToString(".0000") + "; progress = " +
progress.ToString("0.000") + "; step = " +
step.ToString() + "; TimeMovementEnd = " +
UI.MovementEndTime.ToString()
);

Debugger.WriteLine 过程的主体仅在 Debug模式下编译(指令#if、#endif)。让我担心的是,我经常需要在 Debugger.WriteLine 调用中使用 ToString(),这很昂贵,因为它仍然会创建新的字符串(例如,用于更改数字)。如何解决这个问题?

关于调试/跟踪的几点/问题:

  • 我不想将每个 Debugger.WriteLine 包装在 IF 语句中或使用预处理器指令以省去调试方法,因为这将不可避免地导致代码可读性差,并且需要输入太多内容.

  • 我不想使用任何框架进行跟踪/调试。我想尝试自己编程。

  • Trace methods如果在 Release模式下编译会被遗漏?如果是这样,我的方法是否有可能表现相似?

  • static String.Format method我可以这样做:

    output = String.Format("你现在{0}岁了。", years);

这看起来不错。它可以解决我的 ToString() 问题吗?

最佳答案

使用 Reflector 我发现 Debug.Writeline 是这样声明的:

[Conditional("DEBUG")]
public static void WriteLine(string message)

这意味着在 Release模式下,所有对此方法的调用都将从代码中消除。

例如这段代码:

public static void Test(int a)
{
string b = Console.ReadLine();
Debug.WriteLine(a + " " + b);
Console.WriteLine(a + " " + b);
}

在 Release模式下编译为:

public static void Test(int a)
{
Console.WriteLine(a + " " + Console.ReadLine());
}

关于c# - 关于C#中有效日志记录的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2640133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com