您好研究员, 当前在我们的一个客户系统中运行的应用程序遇到OutofMemoryException问题,并且该应用程序崩溃。发生此问题的时间可能是一两个星期一次。使用c#开发的应用程序用于生产线。机器几乎每20秒产生28个不同的CSV文件。该应用程序用于查找这些CSV文件并存档。因此,应用程序每秒查询并执行一次对数据库表(具有大量数据的表)的更新/选择。我通读了其他程序员的问题和解答,并据此分析了我的代码,但是由于缺乏经验,我发现代码中存在内存泄漏。我将在这里分享我的代码的某些部分,我相信这些部分可能会发生内存泄漏。如果您分享您的意见或想法,将不胜感激。
代码
public void execute() //This is called every second
{
if (!this.busyBit)
{
this.busyBit = true;
CallAsyncFunction();
}
}
protected async virtual void CallAsyncFunction()
{
await Task.Factory.StartNew(this.FileOperations); //is this correctly done?
}
protected virtual void FileOperations()
{
////Searches for a new csv file
if (!this. SearchTimestampInsideFileWithOddCounter())
{
//return error
}
if (!this.ArchiveFile())
{
//Archive the file
}
this.busyBit = false;
}
private bool SearchTimestampInsideFileWithOddCounter()
{
var directory = new DirectoryInfo(this.fileSearchPath);
//Can the below code be a reason? because when I increased
//'numberOfFiles' to a huge number, the exception occured more frequently.
FileInfo[] files = directory.EnumerateFiles().Where(f =>
f.Extension.Equals(".csv", StringComparison.InvariantCultureIgnoreCase)
&& f.Attributes != FileAttributes.Archive)
.OrderByDescending(fi =>
fi.LastWriteTime).Take(this.numberOfFiles).ToArray();
foreach (var file in files)
{
//Search for the required files from the list
return true;
}
catch (Exception ex)
{
}
return false;
}
答案 0 :(得分:0)
我认为答案可能是
应用程序每秒查询并对数据库表(该表具有大量数据)进行更新/选择。
应用程序是否一直在运行,还是仅在n秒内运行?如果它始终处于应用程序状态,则 if 如果未正确处理数据库对象,则内存占用量将在每个周期增加。