Почему действительно ловит (TException), обработка поведения блока отличается под отладчиком после установки Visual Studio 2008?

Если вы не хотите использовать много памяти при создании большого файла CSV, не создавайте поток вывода на основе памяти. Создайте поток вывода в фактический файл. Тогда данные CSV будут записаны в файл, а не в память. Тогда файл может быть гигабайтным и использовать очень мало памяти.

Это дает дополнительное преимущество: нет необходимости обращаться к данным буфера, создавать из них строку (теперь удваивает использование памяти), а затем записывать строку в файл.

NSOutputStream *csvStream = [NSOutputStream outputStreamToFileAtPath:csvPath append:NO];
[csvStream open];
CHCSVWriter *writer = [[CHCSVWriter alloc] initWithOutputStream:csvStream encoding:NSUTF8StringEncoding delimiter:';'];

// write your CSV entries

[writer closeStream];

Вот и все. Никакого другого кода, необходимого для создания файла.

В дополнение к этим изменениям вам необходимо изменить место использования пула автоматического выпуска. Он должен быть внутри внешней петли for.

//> write the rows
for (NSMutableDictionary *row in [self sharedUploadManager].modifiedRows) {
    @autoreleasepool {
        NSArray *orderedKeys = [[row allKeys] sortedArrayUsingDescriptors:keySortDescriptors];

        for (NSString *key in orderedKeys ) {

            NSString *field = [row objectForKey:key];
            if ([field isKindOfClass:[NSNull class]]) {
                [writer writeField:nil];
            } else {
                [writer writeField:field];
            }
        }

        //> finish the line
        [writer finishLine];
    }
}

Это обеспечит очистку памяти автоматически освобожденных объектов после каждой строки.

9
задан JaredPar 31 March 2009 в 13:35
поделиться

2 ответа

Это странно действительно. Я проверил, что проблема также существует с VB.Net, таким образом, это не конкретный вопрос C#. Это должно будет быть подтверждено базовой командой отладчика, но это действительно похоже на ошибку.

Зарегистрируйте ошибку на Подключении и отправьте число ошибки как комментарий к моему OP так, чтобы я мог удостовериться, что это направляется корректной команде.

9
ответ дан 4 December 2019 в 20:24
поделиться

Это - известная проблема, которая вызывается ошибкой в CLR. Это было зафиксировано в CLR 4.0 (пока еще невыпущенный).

Благодаря JaredPar для помощи с этим. См. комментарии к его ответу для большего количества детали и ссылке на исходный отчет об ошибках на Microsoft Connect.

2
ответ дан 4 December 2019 в 20:24
поделиться