這是優化的一部分,3寫文件需要爲交通繁忙部分4
Write file need to optimised for heavy traffic part 3
繼續爲我的代碼有所改變,我認爲這是更好地打開一個新的線程。
public class memoryStreamClass
{
static MemoryStream ms1 = new MemoryStream();
static MemoryStream ms2 = new MemoryStream();
static int c = 1;
public void fillBuffer(string outputString)
{
byte[] outputByte = Encoding.ASCII.GetBytes(outputString);
if (c == 1)
{
ms1.Write(outputByte, 0, outputByte.Length);
if (ms1.Length > 8100)
{
c = 2;
Thread thread1 = new Thread(() => emptyBuffer(ref ms1));
thread1.Start();
}
}
else
{
ms2.Write(outputByte, 0, outputByte.Length);
if (ms2.Length > 8100)
{
c = 1;
Thread thread2 = new Thread(() => emptyBuffer(ref ms2));
thread2.Start();
}
}
}
void emptyBuffer(ref MemoryStream ms)
{
FileStream outStream = new FileStream(string.Format("c:\\output.txt", FileMode.Append);
ms.WriteTo(outStream);
outStream.Flush();
outStream.Close();
ms.SetLength(0);
ms.Position = 0;
Console.WriteLine(ms.Position);
}
有2件事情我已經改變從代碼改變部分3
- 類和方法被改變成非靜態,變量仍然靜態壽。
- 我已經將memorystream復位長度移動到emptyBuffer方法中,並且我使用ref參數將引用而不是副本傳遞給方法。
這段代碼編譯得很好,運行正常。但是,我將它與單線程程序並行運行,在同一網絡上使用2臺計算機,一臺計算機運行單線程,一臺計算機運行多線程版本。我跑它大約5分鐘。單線程版本收集8333KB數據,而多線程版本收集僅8222KB數據。 (98.6%的單線版本)
它的第一次我做了任何2版本之間的性能比較。也許一個應該運行更多的測試來確認它。但是基於查看代碼,那裏的任何主人都會指出任何問題?
我現在還沒有把任何代碼放在鎖或線程池上,也許我應該,但是如果代碼運行良好,我不想改變它並打破它。我唯一會改變的就是緩衝區大小,所以我將消除緩衝區填滿之前另一個被清空的機會。
對我的代碼有任何意見?
我看了這個問題的所有以前的分期付款,它看起來像**你沒有實際的問題**。你只是預料到一個問題,並試圖搶先解決它。首先,以最簡單的形式實施它,明確「實際」問題,從中推導出一個要求並試圖滿足這一要求。解決問題將會容易得多,因爲SO用戶將有更大的想法空間。 – 2012-07-18 15:23:16