簡體   English   中英

DateTime對象的內存泄漏?

[英]Memory Leak with DateTime objects?

我遇到了內存泄漏問題,我相信這是由DateTime對象引起的。 我的代碼正在從客戶端接收一個整數,創建一個DateTime對象,從該對象中生成一個整數,將其與客戶端發送的內容進行比較,然后將該數據發送回去。 當客戶端發送對其ping的請求時,這種情況每1000毫秒發生一次。

客戶端代碼:

private void sendPingRequest()
{
    List<byte> payloadData = new List<byte>();
    DateTime now = DateTime.UtcNow;
    int seconds = now.Second;
    int ms = now.Millisecond;
    int totalMs = (1000 * seconds) + ms;
    payloadData.AddRange(BitConverter.GetBytes((short)26));
    payloadData.AddRange(BitConverter.GetBytes(4));
    payloadData.AddRange(BitConverter.GetBytes(totalMs));
    client.GetStream().Write(payloadData.ToArray(), 0, payloadData.Count);
    return;
}

服務器端代碼:(在tcplistener讀取所有數據之后)

private void handlePing(byte[] data, TcpClient sender)
{
    int pingRequest = BitConverter.ToInt32(data, 0);
    DateTime now = DateTime.UtcNow;
    int seconds = now.Second;
    int ms = now.Millisecond;
    int realMs = (1000 * seconds) + ms;
    int diff = realMs - pingRequest;
    List<byte> backData = new List<byte>();
    backData.AddRange(BitConverter.GetBytes((short)27));
    backData.AddRange(BitConverter.GetBytes(4));
    backData.AddRange(BitConverter.GetBytes(diff));
    sender.GetStream().Write(backData.ToArray(), 0, backData.ToArray().Length);
}

當服務器接收到這些ping請求之一並將其發送回時,應用程序的總內存開始緩慢增加,並且速度呈指數級增長。 Visual Studio調試器

謝謝,任何解決此問題的幫助都將受到贊賞!

文檔說,關閉客戶端時不會關閉您獲得的流。

根據您的一般處理方式,如果此功能是在TcpClient的流上運行的唯一功能,則可能應將其關閉。 甚至可以使用using塊:

var stream = sender.GetStream();
stream.Write(backData.ToArray(), 0, backData.ToArray().Length);
stream.Close();

要么

using(var stream = sender.GetStream())
{
    stream.Write(backData.ToArray(), 0, backData.ToArray().Length);
}

DateTime對象導致內存泄漏的可能性很小。 通常,如果對象不是Disposable,並且沒有事件訂閱(持久實例),則它不應成為內存泄漏的根本原因。 話雖如此,您確實需要一個適當的工具(例如RedGate Memory Profiler )來分析內存泄漏。

您提供的代碼不足以說明任何有關內存泄漏的信息。 但是,請記住,當您不再需要所有一次性對象時,請務必對其進行處置。 在創建本地一次性對象時使用“使用”,它將在實例超出范圍時對其進行處置。 特別是在使用任何類型的流時,最好的做法是將它們包裝在using子句中。 它將關閉並為您處置處置時實際上處置會關閉流 )。

所以,是的。 嘗試處置所有一次性物品,然后再次測試。 “ backData”對象對我來說可疑。 確保清除或適當處置它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM