1

大家好,我有一个场景,我有一个 winform 应用程序作为服务器,无数个 winform 应用程序作为客户端

基本上每个客户端都连接到服务器并向服务器发送一个字符串,服务器进行一些计算并将字符串返回给客户端,但是服务器必须连接到另一台服务器以计算该字符串,并且作为来自第二台服务器的响应,我们的主服务器存储在字符串变量中响应并在某些特定时间间隔后在文本框中显示该字符串变量,但每次计算后该字符串会变得越来越大,因此我的服务器有时开始在任务管理器中消耗 1gb 内存和我的 cpu 使用量的 40%,当我删除字符串变量时,我的服务器运行在 45mb 的内存和 0-4% 的 cpu 使用率上,我正在使用这样的字符串变量

string Serverlog += datafetched + "cl"

我也尝试过一个字符串生成器对象,但结果是一样的,所以任何人都可以帮我整理东西(我怎样才能在不消耗太多内存的情况下保存日志),而且一件事更多的日志不会保存在它们只用于的任何文件中将它们显示到文本框中

4

6 回答 6

1

最好的解决方案是将你的日志存储在某个地方,数据库/文件/winlogging/其他

你在客户端上运行什么样的应用程序?请注意,您使用文本框的AppendText功能。所以不要使用:

Textbox.Text += "additional info"

但使用

Textbox.AppendText(teTonenTekst + Environment.NewLine);
于 2013-10-09T11:07:42.503 回答
1

虽然记录到文件是最好的,但您提到您不希望这样做。

对于基于 UI 的日志记录,我通常避免使用 a TextBox,而是使用带有隐藏网格线的 a ListViewor 。DataGridView这样,很容易将值的数量截断到一个限制,只在控件中保留最近的数据。

对不同类型的记录数据进行颜色编码也更容易。

于 2013-10-09T11:08:04.760 回答
0

您应该用于text file记录应用程序操作。

于 2013-10-09T11:06:49.997 回答
0

我建议将日志存储在文件中,而不是将所有内容都保存在变量中。我个人总是通过使用日志功能来做到这一点,该功能每天为每个用户创建一个单独的日志文件。这样您就可以更好地控制日志,而不必担心性能问题。看看这个例子:

    internal static void WriteLog(string str, string clientNumber)
    {

        StreamWriter logWriter = null;

        string todayDateString = DateTime.Now.Day.ToString() + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Year.ToString();
        string fullLogFileName = todayDateString + "_" + clientNumber + "_log.txt";
        string LogPath = @"\\server\folder\Logs\";

        string fullLogFilePathWithName = LogPath + fullLogFileName;


        if (!File.Exists(fullLogFilePathWithName))
        {
            logWriter = new StreamWriter(fullLogFilePathWithName, true);

            logWriter.WriteLine(DateTime.Now.ToString("d.MM.yyyy h:mm") + " - " + str);
            logWriter.Flush();
        }
        else
        {
            logWriter = File.AppendText(fullLogFilePathWithName);

            logWriter.WriteLine(DateTime.Now.ToString("d.MM.yyyy h:mm") + " - " + str);
            logWriter.Flush();
        }

        logWriter.Dispose();
        logWriter.Close();

    }
于 2013-10-09T11:07:44.420 回答
0

您可以将文本写入文件或 MSMQ 或 Telnet 并清除变量。在显示从上述来源之一读取的内容时。

于 2013-10-09T11:04:34.023 回答
0

.net 已经内置了对跟踪/日志记录的支持:http:
//msdn.microsoft.com/en-us/library/zs6s4h68.aspx
但是,我们使用 log4net,我对此很满意:
http:// logging.apache.org/log4net/
从您的问题来看,日志是由服务器还是客户端显示的还不是很清楚。但是,log4net 支持通过网络登录,例如UPD Appender

于 2013-10-09T11:09:42.987 回答