2013-08-20 91 views
0

我有一個ASP.NET網站。我正在寫日誌文件,以獲得頁面的總時間跨度。寫日誌txt文件會影響我的程序的性能嗎?我在OnUnload這類事件中記錄了這一點。將日誌寫入文本文件會影響網站的性能嗎?

string logString = string.Format("The total time span for the '{0}' is {1}ms", 
           _page, 
           span.TotalMilliseconds); 
WriteLog(logString); 

日誌摘錄:

8/6/2013 05:38:27]:The total time span for the 'Assign' is 3121.1785ms 
[8/6/2013 05:38:27]:The total time span for the 'Assign' is 5.0002ms 
[8/6/2013 05:38:27]:The total time span for the 'Assign' is 5.0003ms 
[8/6/2013 05:38:27]:The total time span for the 'Assign' is 4.0002ms 
[8/6/2013 05:38:27]:The total time span for the 'Assign' is 5.0003ms 
[8/6/2013 05:38:27]:The total time span for the 'Assign' is 6.0004ms 
+1

多少個併發用戶,你期待嗎?可能不是少數用戶的問題,但也有少數數十萬可能會對你的應用產生負面影響,這是你可以從IIS日誌中獲得的東西嗎?(爲什麼重新發明輪子,如果你不需要) – Tim

+0

只有一些用戶,但我在代碼中看到日誌寫了好幾次在第二個 – JIKKU

+0

我已經在我的問題上面粘貼了日誌 – JIKKU

回答

1

你做的東西的數量,並什麼會影響你的表現。寫入文件相對較慢,所以是的,它會做某事到您的表現。多少取決於你的硬件配置,坦率地說,在你沒有顯示的方法上你的WriteLog()

除此之外,只要有一個進程試圖在日誌中寫入某些內容,而另一個進程執行相同操作,就會出現問題。

如果您想盡量減少對性能的影響,請嘗試儘快卸載日誌記錄,最好是將其卸載到不同的線程。

1

嗯,影響是最有可能不會受到影響。至少不明顯只要你沒有記錄太多。你應該看看像log4net這樣的日誌框架。它會爲你做很多事情,就像在給定數量的日誌之後寫入txt文件一樣。這將減少寫入文件的數量。

如果你想自己做,我會建議在另一個線程執行日誌,就像這樣:

var thread = new Thread(message => 
    { 
     // write message to txt file. 
    }); 

thread.Start("This is a log statement"); 

這樣,它不會佔用你的主線程。但是,使用多線程寫入文件是相當危險的。您需要一些鎖定:

private static readonly object _writeLock = new object(); 

var thread = new Thread(message => 
    { 
     lock (_writeLock) 
     { 
      // write message to txt file. 
     } 
    }); 

thread.Start("This is a log statement"); 

現在您確定只有一個線程正在寫入文件。我仍然建議使用log4net或任何其他框架爲您完成這項工作。

+0

好的,謝謝你。但是我問過我已經實施的方式。第二次登錄會影響性能嗎? – JIKKU

+0

我猜可以重做執行。這個問題的答案取決於你的硬件。在你目前的情況下:我認爲是。僅僅因爲你正在爲每個日誌語句寫入一個文件。多個用戶可能會導致一些性能問題。 –

+0

同樣,我的建議是:使用現有的框架。開發這些框架的人最有可能在開發時考慮到性能。不要重新發明輪子。 –

0

是的,它影響應用程序的性能,效果是成正比的用戶

0

如果您只需要時間,IIS日誌默認具有該功能。

Default IIS log format(說IIS6,贏得服務器2003,但是這是在新版本中默認爲好。

time-taken: The length of time that the action took, in milliseconds.