Программа развернута на IIS 8
Странная проблема: если пул приложений будет перезагружен, программа будет нормальной в течение короткого периода времени, а исключение переполнения памяти будет выброшено позже
Я думал о многих решениях, включая оптимизацию кода для многих версий, но не смог решить эту проблему, в том числе запись с использованием StringWriter, чтение сегментов с использованием BinaryReader и т. Д. c., Не может решить эту проблему;
Я использовал класс SoapHelper для доступа к веб-сервису, и этот веб-сервис странно просил загружать вложения и сообщения в интерфейс вместе, поэтому я прочитал соответствующие вложения в своей собственной программе и создал файлы Xml для их отправки; Когда нет вложений или небольших вложений, этот метод подойдет, но если вложения слишком велики, переполнение памяти будет выброшено ... Запрошенный Xml равен 69M, как показано на рисунке xml file
Это тривиально для сервера с 56 логическими процессорами с коэффициентом использования 1% и использованием памяти 64G с коэффициентом использования около 14%.
Это мое сообщение об исключении
ReTry
Message :
Exception of type 'System.OutOfMemoryException' was thrown.
StackTrace:
at System.Text.StringBuilder.ToString()
at System.IO.StringWriter.ToString()
at Ls.WFS.Core.Helper.WebServiceCallHelper.GteFileByte(String physicalFilePath, Int32 bufferSizeInBytesDiv3) in D:\23_Flow\2_Code\Ls.WFS.Core\Helper\WebServiceCallHelper.cs:line 233
https://i.stack.imgur.com/dZSuj.png
Это метод для чтения одного вложения. Если существует несколько вложений, этот метод будет вызываться в любом случае. oop. и это myCode
private string GteFileByte(string physicalFilePath, int bufferSizeInBytesDiv3 = 1024)
{
using (var fileStream = File.Open(physicalFilePath, FileMode.Open, FileAccess.Read))
using (var reader = new BinaryReader(fileStream))
using (var sw = new StringWriter())
{
byte[] data;
while ((data = reader.ReadBytes(bufferSizeInBytesDiv3)).Length > 0)
{
sw.Write(Convert.ToBase64String(data));
}
sw.Close();
reader.Close();
reader.Close();
fileStream.Close();
return sw.ToString();
}
}
sw.ToString () вызывает исключение
Пока не знаю
Попросить помощи, спасибо ты очень