В настоящее время я работаю со службами Integration Services (SSIS) для загрузки большого количества файлов XML в базу данных сервера SQL.Каждое содержимое файла XML должно быть распределено в нескольких таблицах.У меня есть как минимум 10000 XML-файлов для загрузки с использованием процесса.Все работает нормально, пока не загружено 6000 файлов.После обработки 6000 я всегда получал OutOfMemoryException из своей первой задачи потока данных, первой в процессе.
В этом компоненте сценария я просто проверяю, присутствует ли значение из файла XML в определенной таблице базы данных.,Если он присутствует, я возвращаю соответствующий идентификатор, в противном случае я добавляю новую запись.Для этого я использую компонент Lookup.Я использую его с опцией No cache, для памяти.Затем в случае совпадения я обрабатываю идентификатор возврата в компоненте скрипта.Как я уже сказал, все работает нормально, пока не обработано более или менее 6000 файлов.После того, как я получил:
Description : System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
at Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.HandleUserException(Exception e)
at Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.PreExecute()
at Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostPreExecute(IDTSManagedComponentWrapper100 wrapper)
Есть ли у вас какие-либо предложения или ресурсы, которые касаются производительности и памяти в SSIS?Сталкивались ли вы с подобной проблемой?У вас есть идея, откуда может возникнуть эта проблема с памятью?
Спасибо:)
РЕДАКТИРОВАТЬ: Вот код для проверки XML с файлом XSD.Вы видите утечку памяти?
public void Main()
{
try
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("", Dts.Variables["XSDFilePath"].Value.ToString());
settings.ValidationType = ValidationType.Schema;
using (XmlReader reader = XmlReader.Create(Dts.Variables["XMLFilePath"].Value.ToString(), settings))
{
XmlDocument document = new XmlDocument();
document.Load(reader);
ValidationEventHandler eventHandler = new ValidationEventHandler(XMLValidationHandler);
document.Validate(eventHandler);
}
if (ValidationResult)
{
Dts.TaskResult = (int)ScriptResults.Success;
}
else
{
Dts.TaskResult = (int)ScriptResults.Failure;
}
}
catch (Exception ex)
{
Dts.TaskResult = (int)ScriptResults.Failure;
}
}
private void XMLValidationHandler(object sender, ValidationEventArgs e)
{
switch (e.Severity)
{
case XmlSeverityType.Error:
Console.WriteLine("Warning {0}", e.Message);
ValidationResult = false;
break;
case XmlSeverityType.Warning:
Console.WriteLine("Warning {0}", e.Message);
break;
}
}