我正在努力解決內存問題,我可以確定地看到它,但我不知道它發生的時間和地點。調試內存泄漏VS2015。大規模原生堆
我的託管堆大小似乎沒問題(100MB),但本機堆大小在未知時刻開始增長,直到它達到〜2GB並且應用崩潰爲止。
我的應用程序正在運行很多線程,並且它在許多循環中通過EF 6執行大量的Db連接。 這就是爲什麼我很難通過查看日誌或放置斷點來調試代碼。
我想也許我可以通過查看內存來了解問題所在,但只有我能看到的是,我的本地堆大小主要由大小爲8,192字節的對象填充。所以我可以看到問題真的發生了,但仍然不知道爲什麼。
我不確定我是否正在使用Visual Studio內存分析器的100%功能。
我現在可以看到的是:
我還能做以上怎麼找到這個問題?
也許這是一個愚蠢的問題,但我正在解決這個問題兩天,我幾乎達到了我的想法限制。
我已經通過斷點,日誌,代碼分析,但我仍然沒有任何線索。
我將不勝感激任何想法。
[編輯] 15:11 2017年2月3日
我能找到負責對泄漏的代碼,但它仍然有沒有意義對我來說。這段代碼如何導致大量內存泄漏?
的代碼是:
public class DbData : IDisposable
{
private DBEntity db;
public DbData()
{
db = new FruitDBEntity();
}
public Fruit AddFruitDefinition(Fruit fruit)
{
lock (thisLock)
{
var newFruit = db.Fruits.Where(f => f.FruitId == fruit.FruitId)
.Where(f => f.FruitName == fruit.FruitName)
.Where(f => f.FruitColor == fruit.FruitColor)
.FirstOrDefault();
if (newFruit == null)
{
newFruit = db.Fruits.Add(fruit);
db.SaveChanges();
}
return newFruit;
}
}
}
類DbData
創建我想使用方法AddFruitDefinition()
每次:
using (var data = new DbData())
{
data.AddFruitDefinition();
}
你可以嘗試註釋掉一些您的循環(假的數據,如果必要的話)來嘗試的引起該問題的代碼部分隔離開來。也許你不會正確處理一些數據庫對象.... –
如果你知道調試診斷,它的泄漏跟蹤功能可以很容易地知道哪個本地庫負責本地泄漏。 –
@RenéVogt:我能夠找到這段代碼。但這看起來很正常。我不知道這裏可能會導致什麼問題。 – Wiktor