我有以下WebJob:WebJob大大減慢我的網站下載下來
static void Main(string[] args)
{
Bootstrap(); //IoC container config
System.Diagnostics.Trace.TraceInformation("Entering the main loop");
while (true)
{
OrdersFetcher.DoWork();
}
}
public static class OrdersFetcher
{
const int MINIMUM_NUMBER_OF_SECONDS_BETWEEN_FETCHES = 10;
static DateTime _lastFetchDate = DateTime.UtcNow.AddSeconds(int.MinValue);
static bool _currentlyRunning = false;
public static void DoWork()
{
if (DateTime.UtcNow - _lastFetchDate < TimeSpan.FromSeconds(MINIMUM_NUMBER_OF_SECONDS_BETWEEN_FETCHES))
return;
if (_currentlyRunning)
return;
_currentlyRunning = true;
_lastFetchDate = DateTime.UtcNow;
Task.Factory.StartNew(() => { FetchOrders(); }).ContinueWith((task) =>
{
_currentlyRunning = false; Console.WriteLine("**** Orders Fetching Ended ****");
});
}
private static FetchOrders()
{
var db = Program.container.Resolve<MyDbContext>();
//Fetch from third party and add changes to DbContext
db.SaveChanges();
db.Dispose();
}
}
的WebJob被配置爲一個Singleton。
我使用的Unity和我的LifetimeManager的DbContext是PerThreadLifetimeManager。對於所有其他類型(這些類型不需要任何類型的處理)每次都會創建一個新實例。
我剛纔檢查和內存消耗正常,但CPU使用率爲100%。爲什麼是這樣的,我該如何解決它?
我沒有意識到無限循環導致100%的CPU使用率。通常,我在循環內執行的任務是長時間運行的任務。非常感謝 – reddy