Excel: Значение по умолчанию для ОТПРАВКИ ТЕКСТОВЫХ СООБЩЕНИЙ, а не ОБЩИЙ при открытии .csv файла

Можно поддерживать отдельный сторожевой процесс в рабочем состоянии. Его единственная задача смотрит, пространство текущего процесса для определения ситуаций как Вы описывают. Это могло даже повторно запустить исходное приложение после катастрофического отказа или предоставить различные возможности пользователю, собрать отладочную информацию и т.д. Просто попытайтесь сохранить его достаточно простым так, чтобы Вам не был нужен второй сторожевой таймер для наблюдения первого.

10
задан JayG 17 November 2009 в 22:11
поделиться

2 ответа

Вы можете попробовать две вещи:

  • Сделать так, чтобы ваш метод hashCode возвращал что-то более простое и эффективное, например, последовательный int

  • Инициализируйте вашу карту как:

     Карта карты = новая HashMap (30000000, .95f);
    

Эти два действия значительно сократят объем перефразирования структуры, и я думаю, что их довольно легко проверить.

Если это не сработает, рассмотрите возможность использования другого хранилища, такого как СУБД.

ИЗМЕНИТЬ

Странно, что установка начальной емкости снижает производительность в вашем случае.

См. Из javadocs :

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

Я сделал микропляж (который ни в коем случае не является окончательным, но, по крайней мере, доказывает этот момент)

$cat Huge*java
import java.util.*;
public class Huge {
    public static void main( String [] args ) {
        Map map = new HashMap( 30000000 , 0.95f );
        for( int i = 0 ; i < 26000000 ; i ++ ) { 
            map.put( i, i );
        }
    }
}
import java.util.*;
public class Huge2 {
    public static void main( String [] args ) {
        Map map = new HashMap();
        for( int i = 0 ; i < 26000000 ; i ++ ) { 
            map.put( i, i );
        }
    }
}
$time java -Xms2g -Xmx2g Huge

real    0m16.207s
user    0m14.761s
sys 0m1.377s
$time java -Xms2g -Xmx2g Huge2

real    0m21.781s
user    0m20.045s
sys 0m1.656s
$

Таким образом, использование начальной емкости снижается с 21 до 16 из-за перефазировки. Это оставляет нам ваш метод hashCode в качестве «области возможностей»;)

EDIT

Это не HashMap

Согласно вашему последнему выпуску.

Я думаю, вам действительно стоит профилировать свое приложение и посмотреть, где оно используется память / процессор.

Я создал класс, реализующий ваш тот же hashCode

Этот хэш-код дает миллионы коллизий, затем количество записей в HashMap резко сокращается.

Я перехожу с 21 до 16 в предыдущем тесте на 10 и 8. Причина в том, что хэш-код вызывает большое количество коллизий, и вы сохраняете не 26 миллионов объектов, как вы думаете, а гораздо меньшее количество (я бы сказал, около 20 тысяч) Итак:

Проблемы НЕ ХЭШ-КАРТА где-то еще в вашем коде.

Пора получить профилировщик и выяснить, где именно. Я бы подумал, что это связано с созданием элемента или, возможно, вы записываете на диск или получаете данные из сети.

Здесь ' Когда вы запишете макрос, вы увидите, что формат задается строкой .TextFileColumnDataTypes = Array (2, 2, 2)

, где 2 задает формат текста, а 3 элемента в массиве относятся к 3 столбцам . Вы можете настроить массив так, чтобы он содержал больше элементов, чем количество столбцов, которые вы ожидаете иметь в ваших текстовых файлах, так как любые лишние будут игнорироваться.

Вы можете нажать F8, чтобы запустить диалоговое окно макроса, которое сокращает процесс до такой степени, что он '; s аналогично открытию из меню файла (хотя все же не так удобно, как возможность двойного щелчка по файлу).

Я нашел полезный пример макроса с некоторыми дополнительными пояснениями здесь

Это более подробно e объяснение того, что делают соответствующие настройки, например, установка правильного разделителя в макросе и т. д.

1
ответ дан 4 December 2019 в 04:53
поделиться

Если у вас есть возможность, вы можете сохранить данные в электронную таблицу XML (я знаю, эти файлы очень быстро становятся большими) - чтобы открыть ее, просто перетащите ее в открытое окно Excel. Это единственный известный мне способ получить желаемый результат. - Это полезно только для небольших и средних наборов данных.

0
ответ дан 4 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: