Adils Adils
Adils Adils

Reputation: 241

.Net Application logging

Hello all I have a scenario where i have one winform app as server and infinite number of winform apps as clients

basically each client connects to server and sends a string to server , server than do some calculations and return string back to client, but server have to connect to another server for calculation of that string and in response from that second server our main server stores the response in a string variable and after some specific time intervals it shows that string variable in a textbox but this string gets bigger and bigger after each calculation and hence my server some times starts consuming 1gb memory in task manager and 40% of my cpu usage , and when i removed the string variable my server was running on 45mb of memory and 0-4% of cpu usage i am using string variable like this

string Serverlog += datafetched + "cl"

i have also tried a string builder object but result is same so can any one help me to sort out things ( how can i save logs without consuming to much memory ) and one thing more logs will not be maitained in any file they are only for showing them into textbox

Upvotes: 1

Views: 839

Answers (6)

cdoubleplusgood
cdoubleplusgood

Reputation: 1369

.net already has built in support for tracing / logging:
http://msdn.microsoft.com/en-us/library/zs6s4h68.aspx
However, we use log4net, and I'm quite happy with it:
http://logging.apache.org/log4net/
From your question it is not quite clear if the log is displayed by the server or the client. However, log4net has support for logging over the net, e.g. an UPD Appender.

Upvotes: 0

Rotem
Rotem

Reputation: 21917

While logging to a file is best, you mentioned you do not want that.

For UI based logging, I usually avoid a TextBox, and instead use a ListView or DataGridView with hidden gridlines. That way it is easy to truncate the amount of values to a limit, keeping only recent data in the control.

It is also easier to color code different types of logging data.

Upvotes: 1

colosso
colosso

Reputation: 2525

I would suggest to store the logs in a file instead of keeping everythingin a variable. I personaly always do that by using a logging function which creates an individual log file for each user each day. Like that you have a better control over your logs and dont have to worry about your preformance problem. Have a look at this example:

    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();

    }

Upvotes: 0

lordkain
lordkain

Reputation: 3109

Best solution is to store your logging somewhere, database / file / winlogging / other

What kind of app are you running on the clients? Be aware that u use the AppendText function of the textbox. So dont use:

Textbox.Text += "additional info"

but use

Textbox.AppendText(teTonenTekst + Environment.NewLine);

Upvotes: 1

kaushik0033
kaushik0033

Reputation: 677

You should be used text file for logging application actions.

Upvotes: 0

Rajesh Subramanian
Rajesh Subramanian

Reputation: 6490

You can write the text in to the file or MSMQ or Telnet and clear the variable. While displaying the contents read from one of the above mentioned source.

Upvotes: 0

Related Questions