[英].Net Windows service out of Memory exception
請讓我知道如何解決以下錯誤。 僅當代碼在生產機中部署后(即一旦Windows服務啟動並在生產機上運行),才會出現“內存不足”異常。 它不會在我們的本地復制。
Application: LSRAnalysisService.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.OutOfMemoryException
Stack:
at System.TimeZoneInfo.GetDaylightTime(Int32, AdjustmentRule)
at System.TimeZoneInfo.GetIsDaylightSavingsFromUtc(System.DateTime, Int32, System.TimeSpan, AdjustmentRule, Boolean ByRef)
at System.TimeZoneInfo.GetUtcOffsetFromUtc(System.DateTime, System.TimeZoneInfo, Boolean ByRef, Boolean ByRef)
at System.DateTime.ToLocalTime(Boolean)
at System.DateTime.FromFileTime(Int64)
at System.Timers.ElapsedEventArgs..ctor(Int32, Int32)
at System.Timers.Timer.MyTimerCallback(System.Object)
at System.Threading.TimerQueueTimer.CallCallbackInContext(System.Object)
at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.TimerQueueTimer.CallCallback()
at System.Threading.TimerQueueTimer.Fire()
at System.Threading.TimerQueue.FireQueuedTimerCompletion(System.Object)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
我們有一個在Windows服務中運行的計時器。
請在下面找到代碼
protected override void OnStart(string[] args)
{
if (wcfserviceHost != null)
wcfserviceHost.Close();
wcfserviceHost = new ServiceHost(typeof(AnalysisManager));
wcfserviceHost.Open();
Deletefile();
}
protected void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Deletefile();
}
private void Deletefile()
{
try
{
timer = new System.Timers.Timer();
timer.Interval = (1000) * 60 * 60;//(10000) * 6;
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
string FilePath = System.Configuration.ConfigurationSettings.AppSettings["FilePath"];
DirectoryInfo dirInfo = new DirectoryInfo(FilePath);
foreach (DirectoryInfo subDirectory in dirInfo.GetDirectories())
{
if (subDirectory.Name == "Temp") continue;
if (subDirectory.CreationTime < DateTime.Now.AddDays(-1))
{
subDirectory.Delete(true);
}
}
timer.Enabled = true;
timer.Start();
}
catch(Exception ex)
{
}
}
}
}
在此先感謝您的幫助。
計時器過多:
private void addtimer()
{
timer = new System.Timers.Timer();
timer.Interval = (1000) * 60 * 60;//(10000) * 6;
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Enabled = true;
timer.Start();
}
protected void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Deletefile();
}
private void Deletefile()
{
try
{
string FilePath = System.Configuration.ConfigurationSettings.AppSettings["FilePath"];
DirectoryInfo dirInfo = new DirectoryInfo(FilePath);
foreach (DirectoryInfo subDirectory in dirInfo.GetDirectories())
{
if (subDirectory.Name != "Temp" && subDirectory.CreationTime < DateTime.Now.AddDays(-1))
subDirectory.Delete(true);
}
}
catch (Exception ex)
{
}
}
並在OnStart中調用addTimer。 附:請盡可能避免繼續。 多數時間是這樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.