大家好,我有一个场景,我有一个winform应用程序作为服务器和无限数量的winform应用程序作为客户端
基本上每个客户端连接到服务器并将字符串发送到服务器,服务器而不是进行一些计算并将字符串返回给客户端,但服务器必须连接到另一个服务器以计算该字符串,并作为响应从第二个服务器我们的主server将响应存储在字符串变量中,并在一些特定的时间间隔后显示文本框中的字符串变量,但每次计算后此字符串变得越来越大,因此我的服务器有时会在任务管理器中占用1gb内存而40% CPU使用率,当我删除字符串变量时,我的服务器运行在45mb的内存和0-4%的CPU使用率我正在使用这样的字符串变量
string Serverlog += datafetched + "cl"
我也尝试了一个字符串构建器对象,但结果是一样的,所以任何人都可以帮我解决问题(如何在不消耗大量内存的情况下保存日志)还有一件事就是不会将任何日志记录在任何文件中仅用于将它们显示在文本框中
答案 0 :(得分:1)
最佳解决方案是将您的日志存储在某处,数据库/文件/ winlogging /其他
您在客户端上运行什么类型的应用程序?请注意,您使用文本框的 AppendText 功能。所以不要使用:
Textbox.Text += "additional info"
但请使用
Textbox.AppendText(teTonenTekst + Environment.NewLine);
答案 1 :(得分:1)
虽然最好记录到文件,但是你提到你不希望这样。
对于基于UI的日志记录,我通常会避免使用TextBox
,而是使用隐藏网格线的ListView
或DataGridView
。这样就很容易将值的数量截断到限制,只保留控件中的最新数据。
对不同类型的日志记录数据进行颜色编码也更容易。
答案 2 :(得分:0)
您可以将文本写入文件或MSMQ或Telnet并清除变量。显示从上述来源之一读取的内容。
答案 3 :(得分:0)
您应该使用text file
来记录应用程序操作。
答案 4 :(得分: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();
}
答案 5 :(得分:0)
.net已经内置了对跟踪/记录的支持:
http://msdn.microsoft.com/en-us/library/zs6s4h68.aspx
但是,我们使用log4net,我对它很满意:
http://logging.apache.org/log4net/
从您的问题来看,服务器或客户端是否显示日志并不十分清楚。但是,log4net支持通过网络进行日志记录,例如UPD Appender。