Я работал над довольно сложным проектом C# VSTO, который делает много разных вещей в Excel. Тем не менее, я недавно наткнулся на проблему, которую я понятия не имею, как решить. Я боюсь, что поставка всего проекта здесь будет преувеличивать мой вопрос и запутать всех, так что это часть с проблемой: < /p>
//this is a simplified version of Range declaration which I am 100% confident in
Range range = worksheet.Range[firstCell, lastCell]
range.Formula = array;
//where array is a object[,] which basically contains only strings and also works perfeclty fine
< /code>
Последняя строка, которая должна вставлять [,] массив в диапазон Excel, используемый для работы в более мелких книгах Excel, но теперь сбои для больших книг с системой. UtofmemoryException: недостаточная память, чтобы продолжить выполнение программы < /code>, и я не знаю, почему она используется с набором. Для массива с менее 400 элементами. Кроме того, использование RAM составляет около 1,2 ГБ в момент сбоя, и я знаю, что этот проект способен работать совершенно нормально с использованием RAM ~ 3GBS. < /P>
Я попробовал следующие вещи: вставка этого ряда по ряду, а затем вставка его сотовой связи, вызывая Gc.collect (). Перед тем, как каждая вставка, но не в атмосфере, но не будет абонент. System.outofmemoryException . < /p>
Поэтому я был бы признателен за любую помощь в решении этой проблемы или в определении того, где ошибка может скрываться, потому что я не могу обернуть голову вокруг того, почему она отказывается работать на массивах с меньшей длиной (но, возможно, с немного большим содержанием) на уровне использования оперативной памяти 1,2 ГБ, что похоже на 1/3 из того, что он используется для управления. Спасибо!List controlsList = new List();
// this list is filled with a quite long method calling a lot of other functions
// if other parts look fine, I guess I'll have to investigate it
int totalRows = 1;
foreach (var control in controlsList)
{
if (control.Length == 0)
continue;
var range = worksheet.GetRange(totalRows + 1, 1, totalRows += control.Length, 11);
//control is an object[n][11] so normally there are no index issues with inserting
range.Formula = control.To2dArray();
}
//GetRange and To2dArray are extension methods
public static Range GetRange(this Worksheet sheet, int firstRow, int firstColumn, int lastRow, int lastColumn)
{
var firstCell = sheet.GetRange(firstRow, firstColumn);
var lastCell = sheet.GetRange(lastRow, lastColumn);
return (Range)sheet.Range[firstCell, lastCell];
}
public static Range GetRange(this Worksheet sheet, int row, int col) => (Range)sheet.CheckIsPositive(row, col).Cells[row, col];
public static T CheckIsPositive(this T returnedValue, params int[] vals)
{
if (vals.Any(x => x
Подробнее здесь: https://stackoverflow.com/questions/604 ... to-a-range
C# Excel Outpmemory Exception, вызванный вставкой в диапазон ⇐ C#
Место общения программистов C#
-
Anonymous
1755266468
Anonymous
Я работал над довольно сложным проектом C# VSTO, который делает много разных вещей в Excel. Тем не менее, я недавно наткнулся на проблему, которую я понятия не имею, как решить. Я боюсь, что поставка всего проекта здесь будет преувеличивать мой вопрос и запутать всех, так что это часть с проблемой: < /p>
//this is a simplified version of Range declaration which I am 100% confident in
Range range = worksheet.Range[firstCell, lastCell]
range.Formula = array;
//where array is a object[,] which basically contains only strings and also works perfeclty fine
< /code>
Последняя строка, которая должна вставлять [,] массив в диапазон Excel, используемый для работы в более мелких книгах Excel, но теперь сбои для больших книг с системой. UtofmemoryException: недостаточная память, чтобы продолжить выполнение программы < /code>, и я не знаю, почему она используется с набором. Для массива с менее 400 элементами. Кроме того, использование RAM составляет около 1,2 ГБ в момент сбоя, и я знаю, что этот проект способен работать совершенно нормально с использованием RAM ~ 3GBS. < /P>
Я попробовал следующие вещи: вставка этого ряда по ряду, а затем вставка его сотовой связи, вызывая Gc.collect (). Перед тем, как каждая вставка, но не в атмосфере, но не будет абонент. System.outofmemoryException . < /p>
Поэтому я был бы признателен за любую помощь в решении этой проблемы или в определении того, где ошибка может скрываться, потому что я не могу обернуть голову вокруг того, почему она отказывается работать на массивах с меньшей длиной (но, возможно, с немного большим содержанием) на уровне использования оперативной памяти 1,2 ГБ, что похоже на 1/3 из того, что он используется для управления. Спасибо!List controlsList = new List();
// this list is filled with a quite long method calling a lot of other functions
// if other parts look fine, I guess I'll have to investigate it
int totalRows = 1;
foreach (var control in controlsList)
{
if (control.Length == 0)
continue;
var range = worksheet.GetRange(totalRows + 1, 1, totalRows += control.Length, 11);
//control is an object[n][11] so normally there are no index issues with inserting
range.Formula = control.To2dArray();
}
//GetRange and To2dArray are extension methods
public static Range GetRange(this Worksheet sheet, int firstRow, int firstColumn, int lastRow, int lastColumn)
{
var firstCell = sheet.GetRange(firstRow, firstColumn);
var lastCell = sheet.GetRange(lastRow, lastColumn);
return (Range)sheet.Range[firstCell, lastCell];
}
public static Range GetRange(this Worksheet sheet, int row, int col) => (Range)sheet.CheckIsPositive(row, col).Cells[row, col];
public static T CheckIsPositive(this T returnedValue, params int[] vals)
{
if (vals.Any(x => x
Подробнее здесь: [url]https://stackoverflow.com/questions/60493267/c-sharp-excel-outofmemory-exception-caused-by-inserting-to-a-range[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия