System outofmemoryexception недостаточно памяти
Пытаюсь присвоить видео аудиодорожку используя AviFile.dll, код:
Выдает исключение:
Исключение типа "System.OutOfMemoryException" возникло в mscorlib.dll, но не было обработано в коде пользователя
Дополнительные сведения: Недостаточно памяти для продолжения выполнения программы.
Выкидывает в хедер AudioStream.cs, на строчку
streamLength имеет значение 1037255184
Видео с аудио длятся 1 час 38 минут. размер AVI файла 282МБ, размер wav файла 989МБ. Если wav файл будет меньшего размера то все ок.
Библиотека сторонняя, с этим уже ничего не поделать, да?
Xerox WorkCentre 3335 - Недостаточно памяти для продолжения работы
Появился в организации мфу WC3335, подключена к локальной сети по wi-fi. Печатала хорошо, но через.
Недостаточно памяти для выполнения
Передаю данные в хранимую процедуру, которая делает update для определенных таблиц. Данные передаю.
"Недостаточно памяти для запуска программы"
Задача - отсортировать случайный массив n=500 методом выбора. Почему то неверно выводит на экран.
Что такое: "недостаточно свободной памяти для обновления экрана, закройте какие-нибудь программы"?
Отцы, а кто скажет, почему в ACCESS 2000, в мною нарисованной базе, когда с десяток раз.
Способ №1, как описано здесь.
Способ №2: считывать аудио не все сразу, а блоками, допустим, по 100 Мб
Способ №1, как описано здесь.
Способ №2: считывать аудио не все сразу, а блоками, допустим, по 100 Мб
Способ 2 мне нравится, но библиотека то сторонняя и не знаю умеет ли она это делать)
P.s. Сейчас 2 раза те же файлы склеился без ошибок, видимо тупая либа..
Видимо, после всяческих компиляций, запусков перезапусков, тупые либы могут оставлять в памяти
повисшие процессы, например, если чуть неправильно работать с Awesomium (веб браузер),
он со временем захламляется, и при нескольких неправильных выходах из проги или прерываниях отладки,
эта сволочь, может легко пооставлять 3-4 процесса Awesomium.Renderer размером каждый - больше 1ГБ.
Которые остануться висеть, пока принудительно не завершишь. Посмотри, не занимается ли тем же самым
твоя библиотека.
Ага, спасибо)
Да я так ради эксперимента клею файлы, по сути то что я делаю это велосипед и мне это не нужно)
Ожидание события для продолжения выполнения функции
Здравствуйте! Сейчас работаю над личным учебным проектом, дабы на опыте изучить javascript.
Существует ли способ вызова MsgBox, без необходимости нажимать OK для продолжения выполнения макроса
Здравствуйте, у меня есть Excel-макрос, который постоянно обновляет данные в ячейках и программа.
Недостаточно памяти да запуска программы Закройте одну или несколько программ и повторите попытку
Добрый день в последнее время на работе некоторые компьютеры начали вести себя странно работаешь.
Диспетчер печати недостаточно ресурсов для выполнения операции
нужно запустить диспетчер печати запускаю в службах и выдает ошибка 0x800706b9 диспетчер печати.
Ошибка: на диске недостаточно свободного места для выполнения операции
Здравствуйте, на днях купил ssd под систему,удалил старую windows и поставил новую, всё получилось.
Ошибка: на диске недостаточно свободного места для выполнения операции
Всем привет, не так давно купил себе ссд диск для компьютера, поставил на него систему, снёс старую.
События
Возникает, когда исключение сериализовано для создания объекта состояния исключения, содержащего сериализованные данные об исключении.
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
The exception that is thrown when there is not enough memory to continue the execution of a program.
Fragmentation in the managed heap
The garbage collector (GC) in a managed application compacts the heaps to reduce the amount of fragmentation. However, it's possible to pin objects in a managed application. Pinned objects can't be moved during heap compaction. Doing so would change the address at which the object is located. If an application pins a large number of objects, and/or it pins objects for a long time, it can cause fragmentation in the managed heap. It can lead to the GC growing the managed heap more often and causing an OOM condition.
Фрагментация управляемой кучи
Сборщик мусора (GC) в управляемом приложении уплотняет кучи, чтобы уменьшить количество фрагментации. Однако можно закрепить объекты в управляемом приложении. Закрепленные объекты не могут быть перемещены во время уплотнения кучи. Это изменит адрес, на котором расположен объект. Если приложение пин-коды большое количество объектов, и / или он пин-коды объектов в течение длительного времени, это может привести к фрагментации в управляемой кучи. Это может привести к более частому выращиванию управляемой кучи и к состоянию OOM.
Leak native resources
Many managed resources will also make use of native resources. Because the GC doesn't clean up native resources, a developer is responsible for implementing and calling the Dispose method to clean up native resources. If you're using a type that implements the IDisposable interface, and you don't call the Dispose method, you risk leaking native resources and causing an OOM condition.
These objects should implement the iDisposable interface and you should call the Dispose method on these objects when you no longer need them.
Return large sets of data
When using data from a database or other data source, it's important to limit the amount of data returned. For example, caching a query result that returns an entire database table to avoid the cost of retrieving parts of data from the database when needed isn't a good approach. Doing so can easily cause high memory and lead to an OOM condition. Allowing a user to start a similar query is another common way to create a high memory situation. For example, return all employees in a company or all customers in the state of Texas with a last name starting with the letter S.
Always limit the amount of data that can be returned from a database. Don't allow queries such as SELECT * FROM. . . because you then have no control over how much data is displayed in your page.
It's equally important to ensure that you aren't displaying a large data result in UI elements, such as the GridView control. Besides the memory required for the returned data, you'll also consume large amounts of data in strings and in UI elements that are required to render the results. By implementing paging and validating input so that large sets of data aren't returned, you can avoid this problem.
Методы
Определяет, равен ли указанный объект текущему объекту.
При переопределении в производном классе возвращает исключение Exception, которое является первопричиной одного или нескольких последующих исключений.
Служит хэш-функцией по умолчанию.
При переопределении в производном классе задает объект SerializationInfo со сведениями об исключении.
Возвращает тип среды выполнения текущего экземпляра.
Создает неполную копию текущего объекта Object.
Создает и возвращает строковое представление текущего исключения.
Remarks
OutOfMemoryException uses the HRESULT COR_E_OUTOFMEMORY , which has the value 0x8007000E.
For a list of initial property values for an instance of OutOfMemoryException, see the OutOfMemoryException constructors.
The value of the inherited Data property is always null .
An OutOfMemoryException exception has two major causes:
You are attempting to expand a StringBuilder object beyond the length defined by its StringBuilder.MaxCapacity property.
The common language runtime cannot allocate enough contiguous memory to successfully perform an operation. This exception can be thrown by any property assignment or method call that requires a memory allocation. For more information on the cause of the OutOfMemoryException exception, see the blog post "Out of Memory" Does Not Refer to Physical Memory.
This type of OutOfMemoryException exception represents a catastrophic failure. If you choose to handle the exception, you should include a catch block that calls the Environment.FailFast method to terminate your app and add an entry to the system event log, as the following example does.
Some of the conditions under which the exception is thrown and the actions you can take to eliminate it include the following:
You are calling the StringBuilder.Insert method.
You are attempting to increase the length of a StringBuilder object beyond the size specified by its StringBuilder.MaxCapacity property. The following example illustrates the OutOfMemoryException exception thrown by a call to the StringBuilder.Insert(Int32, String, Int32) method when the example tries to insert a string that would cause the object's Length property to exceed its maximum capacity.
You can do either of the following to address the error:
Replace the call to the StringBuilder.StringBuilder(Int32, Int32) constructor with a call any other StringBuilder constructor overload. The maximum capacity of your StringBuilder object will be set to its default value, which is Int32.MaxValue.
Call the StringBuilder.StringBuilder(Int32, Int32) constructor with a maxCapacity value that is large enough to accommodate any expansions to the StringBuilder object.
Your app runs as a 32-bit process.
32-bit processes can allocate a maximum of 2GB of virtual user-mode memory on 32-bit systems, and 4GB of virtual user-mode memory on 64-bit systems. This can make it more difficult for the common language runtime to allocate sufficient contiguous memory when a large allocation is needed. In contrast, 64-bit processes can allocate up to 8TB of virtual memory. To address this exception, recompile your app to target a 64-bit platform. For information on targeting specific platforms in Visual Studio, see How to: Configure Projects to Target Platforms.
Your app is leaking unmanaged resources
Although the garbage collector is able to free memory allocated to managed types, it does not manage memory allocated to unmanaged resources such as operating system handles (including handles to files, memory-mapped files, pipes, registry keys, and wait handles) and memory blocks allocated directly by Windows API calls or by calls to memory allocation functions such as malloc . Types that consume unmanaged resources implement the IDisposable interface.
If you are consuming a type that uses unmanaged resources, you should be sure to call its IDisposable.Dispose method when you have finished using it. (Some types also implement a Close method that is identical in function to a Dispose method.) For more information, see the Using Objects That Implement IDisposable topic.
If you have created a type that uses unmanaged resources, make sure that you have implemented the Dispose pattern and, if necessary, supplied a finalizer. For more information, see Implementing a Dispose method and Object.Finalize.
You are attempting to create a large array in a 64-bit process
You are working with very large sets of data (such as arrays, collections, or database data sets) in memory.
When data structures or data sets that reside in memory become so large that the common language runtime is unable to allocate enough contiguous memory for them, an OutOfMemoryException exception results.
To prevent the OutOfMemoryException exceptions, you must modify your application so that less data is resident in memory, or the data is divided into segments that require smaller memory allocations. For example:
If you are retrieving all of the data from a database and then filtering it in your app to minimize trips to the server, you should modify your queries to return only the subset of data that your app needs. When working with large tables, multiple queries are almost always more efficient than retrieving all of the data in a single table and then manipulating it.
If you are executing queries that users create dynamically, you should ensure that the number of records returned by the query is limited.
If you are using large arrays or other collection objects whose size results in an OutOfMemoryException exception, you should modify your application to work the data in subsets rather than to work with it all at once.
The following example gets a array that consists of 200 million floating-point values and then calculates their mean. The output from the example shows that, because the example stores the entire array in memory before it calculates the mean, an OutOfMemoryException is thrown.
The following example eliminates the OutOfMemoryException exception by processing the incoming data without storing the entire data set in memory, serializing the data to a file if necessary to permit further processing (these lines are commented out in the example, since in this case they produce a file whose size is greater than 1GB), and returning the calculated mean and the number of cases to the calling routine.
You are repeatedly concatenating large strings.
Because strings are immutable, each string concatenation operation creates a new string. The impact for small strings, or for a small number of concatenation operations, is negligible. But for large strings or a very large number of concatenation operations, string concatenation can lead to a large number of memory allocations and memory fragmentation, poor performance, and possibly OutOfMemoryException exceptions.
When concatenating large strings or performing a large number of concatenation operations, you should use the StringBuilder class instead of the String class. When you have finished manipulating the string, convert the StringBuilder instance to a string by calling the StringBuilder.ToString method.
You pin a large number of objects in memory.
Evaluate whether each object really needs to be pinned,
Ensure that each object is unpinned as soon as possible.
Make sure that each call to the GCHandle.Alloc(Object, GCHandleType) method to pin memory has a corresponding call to the GCHandle.Free method to unpin that memory.
The following Microsoft intermediate (MSIL) instructions throw an OutOfMemoryException exception:
Комментарии
OutOfMemoryException использует HRESULT COR_E_OUTOFMEMORY , имеющий значение 0x8007000E.
Список начальных значений свойств для экземпляра OutOfMemoryException, см. в разделе OutOfMemoryException конструкторы.
Значение унаследованного Data свойства всегда null равно .
Исключение OutOfMemoryException имеет две основные причины:
Вы пытаетесь развернуть StringBuilder объект за пределами длины, определенной его StringBuilder.MaxCapacity свойством.
Среда CLR не может выделить достаточно непрерывной памяти для успешного выполнения операции. Это исключение может быть вызвано любым вызовом назначения свойства или метода, требующим выделения памяти. Дополнительные сведения о причине OutOfMemoryException исключения см. в записи блога "Нехватка памяти" не относится к физической памяти.
Этот тип OutOfMemoryException исключения представляет собой катастрофический сбой. Если вы решили обработать исключение, необходимо включить catch блок, вызывающий Environment.FailFast метод для завершения приложения и добавить запись в системный журнал событий, как показано в следующем примере.
Некоторые условия, при которых возникает исключение, и действия, которые можно предпринять для устранения, включают в себя следующее:
Вызывается StringBuilder.Insert метод.
Вы пытаетесь увеличить длину объекта, превышающего StringBuilder размер, указанный его StringBuilder.MaxCapacity свойством. В следующем примере показано OutOfMemoryException исключение, вызванное вызовом StringBuilder.Insert(Int32, String, Int32) метода при попытке вставить строку, которая приведет к превышению максимальной емкости свойства объекта Length .
Чтобы устранить ошибку, выполните одно из следующих действий:
Замените вызов StringBuilder.StringBuilder(Int32, Int32) конструктора любой другой StringBuilder перегрузкой конструктора. Максимальная емкость StringBuilder объекта будет задана в качестве значения по умолчанию.Int32.MaxValue
StringBuilder.StringBuilder(Int32, Int32) Вызовите конструктор со значением maxCapacity , достаточно большим для размещения любых расширений StringBuilder объекта.
Приложение выполняется как 32-разрядный процесс.
32-разрядные процессы могут выделять не более 2 ГБ памяти виртуального пользовательского режима в 32-разрядных системах и 4 ГБ памяти виртуального пользовательского режима в 64-разрядных системах. Это может сделать среду CLR более сложной для выделения достаточной непрерывной памяти, если требуется большое выделение. В отличие от этого, 64-разрядные процессы могут выделять до 8 ТБ виртуальной памяти. Чтобы устранить это исключение, перекомпилируйте приложение для 64-разрядной платформы. Сведения о целевых платформах в Visual Studio см. в разделе "Практическое руководство. Настройка проектов для целевых платформ".
Ваше приложение утечки неуправляемых ресурсов
Хотя сборщик мусора может освободить память, выделенную управляемым типам, она не управляет памятью, выделенной для неуправляемых ресурсов, таких как дескрипторы операционной системы (включая дескрипторы файлов, сопоставленные с памятью файлы, каналы, разделы реестра и дескрипторы ожидания) и блоки памяти, выделенные непосредственно Windows вызовами API или вызовами функций выделения памяти, таких как malloc . Типы, использующие неуправляемые IDisposable ресурсы, реализуют интерфейс.
Если вы используете тип, использующий неуправляемые ресурсы, обязательно вызовите его IDisposable.Dispose метод после завершения использования. (Некоторые типы также реализуют метод, идентичный Close в функции методу Dispose .) Дополнительные сведения см. в разделе "Использование объектов, реализующих IDisposable ".
Если вы создали тип, использующий неуправляемые ресурсы, убедитесь, что вы реализовали шаблон Dispose и при необходимости предоставили метод завершения. Дополнительные сведения см. в разделе "Реализация метода Dispose " и Object.Finalize.
Вы пытаетесь создать большой массив в 64-разрядном процессе
Вы работаете с очень большими наборами данных (например, массивами, коллекциями или наборами данных базы данных) в памяти.
Когда структуры данных или наборы данных, находящиеся в памяти, становятся настолько большими, что среда CLR не может выделить достаточно непрерывной памяти для них, OutOfMemoryException результаты исключения.
Чтобы предотвратить OutOfMemoryException исключения, необходимо изменить приложение таким образом, чтобы меньше данных было в памяти, или данные делятся на сегменты, требующие выделения памяти меньшего размера. Пример:
Если вы извлекаете все данные из базы данных, а затем фильтруете их в приложении, чтобы свести к минимуму поездки на сервер, необходимо изменить запросы, чтобы вернуть только подмножество данных, необходимых приложению. При работе с большими таблицами несколько запросов почти всегда эффективнее, чем извлечение всех данных в одной таблице, а затем управление ими.
При динамическом выполнении запросов, создаваемых пользователями, следует убедиться, что количество записей, возвращаемых запросом, ограничено.
Если вы используете большие массивы или другие объекты коллекции, размер которых приводит к OutOfMemoryException исключению, следует изменить приложение, чтобы работать с данными в подмножествах, а не работать с ним одновременно.
В следующем примере возвращается массив, состоящий из 200 миллионов значений с плавающей запятой, а затем вычисляется среднее значение. Выходные данные из примера показывают, что, так как в примере хранится весь массив в памяти, прежде чем вычисляется среднее значение, OutOfMemoryException возникает исключение.
В следующем примере исключение устраняется OutOfMemoryException путем обработки входящих данных, не сохраняя весь набор данных в памяти, сериализируя данные в файл при необходимости, чтобы разрешить дальнейшую обработку (эти строки закомментированы в этом примере, так как в этом случае они создают файл, размер которого превышает 1 ГБ), а также возвращает вычисляемое среднее значение и количество случаев в вызывающую подпрограмму.
Вы неоднократно объединяете большие строки.
Поскольку строки являются неизменяемыми, каждая операция объединения строк создает новую строку. Влияние на небольшие строки или небольшое количество операций объединения незначительно. Но для больших строк или очень большого количества операций объединения строк объединение строк может привести к большому количеству выделений памяти и фрагментации памяти, низкой производительности и, возможно, исключений OutOfMemoryException .
При объединении больших строк или выполнении большого количества операций объединения следует использовать StringBuilder класс вместо String класса. Завершив обработку строки, преобразуйте экземпляр в StringBuilder строку, вызвав StringBuilder.ToString метод.
Вы закрепляете большое количество объектов в памяти.
Оцените, требуется ли закрепление каждого объекта.
Убедитесь, что каждый объект не закреплен как можно скорее.
Убедитесь, что каждый вызов GCHandle.Alloc(Object, GCHandleType) метода для закрепления памяти имеет соответствующий вызов GCHandle.Free метода, чтобы открепить память.
Следующие инструкции msIL создают OutOfMemoryException исключение:
Запуск в производственной среде с включенной трассировой
Трассировка должна быть отключена в производственной среде. Это можно сделать, установив атрибут элемента false enabled в web.config файле. Включение развертывания розничной торговли с помощью также отключает трассировку в приложениях.
Constructors
Initializes a new instance of the OutOfMemoryException class.
Initializes a new instance of the OutOfMemoryException class with serialized data.
Initializes a new instance of the OutOfMemoryException class with a specified error message.
Initializes a new instance of the OutOfMemoryException class with a specified error message and a reference to the inner exception that is the cause of this exception.
Events
Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.
Run in a production environment with tracing enabled
Tracing should be disabled in a production environment. You can do so by setting the enabled attribute of the element to false in your web.config file. Enabling retail deployment by using also disables tracing in your applications.
Methods
Determines whether the specified object is equal to the current object.
When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.
Serves as the default hash function.
When overridden in a derived class, sets the SerializationInfo with information about the exception.
Gets the runtime type of the current instance.
Creates a shallow copy of the current Object.
Creates and returns a string representation of the current exception.
Утечка родных ресурсов
Многие управляемые ресурсы также будут использовать местные ресурсы. Поскольку GC не очищает местные ресурсы, разработчик отвечает за реализацию и вызов метода Dispose для очистки местных ресурсов. Если используется тип, реализующий интерфейс, и метод не вызывается, вы рискуете утечь родной ресурс и вызвать состояние IDisposable Dispose OOM.
Эти объекты должны реализовать интерфейс, и вы должны вызвать метод на этих объектах, iDisposable когда они больше не Dispose нужны.
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Исключение, которое выбрасывается при недостаточном объеме памяти для выполнения программы.
Фрагментация в пространстве Виртуальный адрес (VA)
Каждый процесс имеет определенное количество памяти, выделенной ему, и эта память представляет собой пространство va для этого процесса. Если пространство va становится фрагментарным, это повышает вероятность того, что GC не может получить большой блок сопоставляемой памяти для роста управляемых кучи. И это может привести к состоянию OOM.
Фрагментация в пространстве VA часто вызвана одним или несколькою из следующих сценариев:
Загрузка одинаковых сборок в несколько доменов приложений.
Если требуется использовать сборку в более чем одном приложении, запущенной в одном пуле приложений, назови сборку и установите ее в GAC. При этом убедитесь, что сборка загружается только один раз в процесс.
Запуск приложения в производстве с атрибутом отлачивки элемента, установленного для true .
Использование скриптов в eXtensible Style sheet Language (XSL) преобразует или создает XmlSerializers .
В этом случае динамические сборки, вызванные extensible style sheet Language Transformations (XSLT) scripting or XmlSerializers .
Конструкторы
Инициализирует новый экземпляр класса OutOfMemoryException.
Инициализирует новый экземпляр класса OutOfMemoryException с сериализованными данными.
Объединение строк
String concatenation
Symptoms
One of the most common issues that we see in Microsoft Customer Support Services is OutOfMemoryException scenarios. So we've put together a collection of resources to help troubleshooting and identifying the cause of memory issues.
Before we cover the details of troubleshooting an OutOfMemoryException , it's important to understand what causes this problem. Contrary to what many developers believe, the amount of RAM that's installed doesn't impact the possibility of an OutOfMemoryException . A 32-bit operating system can address 4 GB of virtual address space, whatever the amount of physical memory that is installed in the box. Out of that, 2 GB is reserved for the operating system (Kernel-mode memory) and 2 GB is allocated to user-mode processes. The 2 GB allocated for Kernel-mode memory is shared among all processes, but each process gets its own 2 GB of user-mode address space. It all assumes that you aren't running with the /3gb switch enabled.
A 32-bit process running on a 64-bit operation system can address 4GB of user-mode memory, and a 64-bit process running on a 64-bit operation system can address 8TB of user-mode memory, so an OOM on a 64-bit operation system isn't likely. It is possible to experience an OOM in a 32-bit process running on a 64-bit operation system, but it usually doesn't occur until the process is using close to 3 GB of private bytes.
There are two reasons why you might see an OOM condition.
- Your process is using much memory (typically over 800 MB in a 32-bit environment.)
- The virtual address space is fragmented, reducing the likelihood that a large, contiguous allocation will succeed.
When an OOM occurs, you may notice one or more of the following symptoms:
Your application may experience high memory as indicated by Task Manager or Performance Monitor.
Requests may take a long time to process.
On Internet Information Services (IIS) 7, you can use Troubleshooting Failed Requests Using Tracing in IIS 7 to troubleshoot long-running requests.
Users may report an error message in the application because of the OOM.
When it comes to determining the cause for an OOM condition, you're actually working to determine the cause for either a high memory situation or a fragmented address space. While we can't document all of the possible causes of these situations, there are some common causes that we see regularly.
The following information outlines common causes of OOM conditions and the resolutions on resolving each of these causes.
Properties
Gets a collection of key/value pairs that provide additional user-defined information about the exception.
Gets or sets a link to the help file associated with this exception.
Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.
Gets the Exception instance that caused the current exception.
Gets a message that describes the current exception.
Gets or sets the name of the application or the object that causes the error.
Gets a string representation of the immediate frames on the call stack.
Gets the method that throws the current exception.
Возвращение больших наборов данных
При использовании данных из базы данных или другого источника данных важно ограничить количество возвращенных данных. Например, кэшинг результата запроса, который возвращает всю таблицу баз данных, чтобы избежать затрат на сбор частей данных из базы данных, когда это необходимо, не является хорошим подходом. Это может легко вызвать высокую память и привести к состоянию OOM. Разрешение пользователю запускать аналогичный запрос — это еще один распространенный способ создания ситуации с высокой памятью. Например, возвращаем всех сотрудников в компании или всех клиентов в штате Техас с фамилией, начиная с буквы S.
Всегда ограничив количество данных, которые можно вернуть из базы данных. Не разрешайте запросы, например потому, что вы не можете контролировать объем данных, SELECT * FROM. . . отображаемой на странице.
Не менее важно убедиться, что в элементах пользовательского интерфейса, таких как управление GridView, не отображается результат больших данных. Помимо памяти, необходимой для возвращенных данных, вы также будете потреблять большие объемы данных в строках и элементах пользовательского интерфейса, необходимых для отображения результатов. Реализуя сбор и проверку входных данных, чтобы не возвращать большие наборы данных, можно избежать этой проблемы.
Симптомы
Одной из наиболее распространенных проблем, которые мы видим в службах поддержки клиентов Майкрософт, являются OutOfMemoryException сценарии. Таким образом, мы собрали коллекцию ресурсов для устранения неполадок и выявления причин проблем с памятью.
Прежде чем охватить сведения об устранении неполадок, важно OutOfMemoryException понять, что вызывает эту проблему. Вопреки мнению многих разработчиков, установленный объем оперативной памяти не влияет на возможность OutOfMemoryException установки . 32-битная операционная система может адресовать 4 ГБ виртуального адресного пространства независимо от количества физической памяти, установленной в поле. Из этого 2 ГБ зарезервировано для операционной системы (память в режиме ядра), а 2 ГБ — для процессов в режиме пользователя. 2 ГБ, выделенные для памяти в режиме ядра, распределяются между всеми процессами, но каждый процесс получает свое собственное 2 ГБ адресного пространства в режиме пользователя. Все это предполагает, что вы не работаете с /3gb включенным переключателем.
32-битный процесс, работающий в 64-битной оперативной системе, может обрабатывать 4 ГБ памяти в режиме пользователя, а 64-битный процесс, работающий в 64-битной оперативной системе, может обрабатывать 8 ТБ памяти в режиме пользователя, поэтому OOM в 64-битной оперативной системе не является вероятным. Можно испытать OOM в 32-битном процессе, запущенном в 64-битной оперативной системе, но обычно это не происходит до тех пор, пока этот процесс не будет использовать около 3 ГБ частных битов.
Существует две причины, по которым может возникнуть состояние OOM.
- Ваш процесс использует много памяти (обычно более 800 МБ в 32-битной среде.)
- Виртуальное пространство адресов раздроблено, что снижает вероятность успешного большого и сопостояного выделения.
Когда возникает OOM, вы можете заметить один или несколько следующих симптомов:
Ваше приложение сбои. Дополнительные сведения см. в Кто это парень OutOfMemoryи почему он делает мой процесс аварии, когда у меня есть много памяти осталось?.
В вашем приложении может быть высокая память, как указано диспетчером задач или монитором производительности.
Обработка запросов может занять много времени.
В службы IIS (IIS) 7 для устранения длительных запросов можно использовать устранение неполадок с помощью отслеживания в IIS 7.
Пользователи могут сообщать об ошибке в приложении из-за OOM.
Когда дело доходит до определения причины для состояния OOM, вы на самом деле работаете, чтобы определить причину или с высокой памятью или фрагментированное пространство адресов. Хотя мы не можем документировать все возможные причины этих ситуаций, существуют некоторые распространенные причины, которые мы регулярно видим.
В следующей информации описаны общие причины условий OOM и решения по устранению каждой из этих причин.
Свойства
Возвращает коллекцию пар «ключ-значение», предоставляющую дополнительные сведения об исключении.
Получает или задает ссылку на файл справки, связанный с этим исключением.
Возвращает или задает HRESULT — кодированное числовое значение, присвоенное определенному исключению.
Возвращает экземпляр класса Exception, который вызвал текущее исключение.
Возвращает или задает имя приложения или объекта, вызывавшего ошибку.
Получает строковое представление непосредственных кадров в стеке вызова.
Возвращает метод, создавший текущее исключение.
Fragmentation in the Virtual Address (VA) space
Each process has a certain amount of memory allocated to it, and that memory represents the VA space for the process. If the VA space becomes fragmented, it increases the likelihood that the GC can't obtain a large block of contiguous memory to grow the managed heaps. And it can lead to an OOM condition.
Fragmentation in the VA space is often caused by one or more of the following scenarios:
Loading the same assemblies into multiple application domains.
If you need to use an assembly in more than one application running in the same application pool, strong-name the assembly and install it into the GAC. By doing that, you ensure that the assembly is only loaded into the process one time.
Running an application in production with the debug attribute of the element set to true .
Use of scripting within eXtensible Style sheet Language (XSL) transforms or creating XmlSerializers .
In this case, dynamic assemblies caused by Extensible Style sheet Language Transformations (XSLT) scripting or XmlSerializers .
Читайте также: