Как быстро читать электронную таблицу Excel в c #

Я использую Microsoft.Office.Interop.Excel для чтения электронной таблицы, открытой в памяти.

gXlWs = (Microsoft.Office.Interop.Excel.Worksheet)gXlApp.ActiveWorkbook.ActiveSheet;
int NumCols = 7;
string[] Fields = new string[NumCols];
string input = null;
int NumRow = 2;
while (Convert.ToString(((Microsoft.Office.Interop.Excel.Range)gXlWs.Cells[NumRow, 1]).Value2) != null)
{
    for (int c = 1; c <= NumCols; c++)
    {
        Fields[c-1] = Convert.ToString(((Microsoft.Office.Interop.Excel.Range)gXlWs.Cells[NumRow, c]).Value2);
    }
    NumRow++;

    //Do my other processing
}

У меня 180 000 строк, и это оказывается очень медленно. Я не уверен, что «Конвертировать» эффективен. Есть ли в любом случае я мог бы сделать это быстрее?

Мун

-121--1406467- Имеет ли каскад = «all-delete-orphan» какое-либо значение в однонаправленной связи «Hibernate» «многие ко многим» с таблицей соединений? У меня есть два объекта, которые образуют отношения «родители-потомки», которые имеют отношения «многие ко многим». Следуя рекомендациям справочного руководства Hibernate, я сопоставил это с помощью таблицы соединений:...

У меня есть два объекта, которые формируют отношение «родитель-потомок», которые имеют отношение «многие ко многим». Следуя рекомендациям справочного руководства Hibernate, я сопоставил это с помощью таблицы соединений:

<class name="Conference" table="conferences">
    ...
    <set name="speakers" table="conference_speakers" cascade="all">
        <key column="conference_id"/>
        <many-to-many class="Speaker" column="speaker_id"/>
    </set>
</class>

<class name="Speaker" table="speakers">
    <id name="id" column="id">
        <generator class="native"/>
    </id>
    <property name="firstName"/>
    <property name="lastName"/>
</class>

Я желаю, чтобы один Спикер мог быть связан со многими различными Конференциями, но также чтобы любой Спикер, который больше не упоминается какой-либо Конференцией, был удален из таблицы Спикеров (как Спикер без связанных конференций не имеет большого значения в моем проекте).

Однако я обнаружил, что если я использую cascade = «all-delete-orphan» , то если Оратор, связанный с несколькими Конференциями, удаляется из только из одной из них , Hibernate пытается удалить сам экземпляр Динамика.

Ниже модульный тест, который показывает это поведение:

@Test
public void testRemoveSharedSpeaker() {

    int initialCount = countRowsInTable("speakers");

    Conference c1 = new Conference("c1");
    Conference c2 = new Conference("c2");

    Speaker s = new Speaker("John", "Doe");

    c1.getSpeakers().add(s);
    c2.getSpeakers().add(s);

    conferenceDao.saveOrUpdate(c1);
    conferenceDao.saveOrUpdate(c2);
    flushHibernate();

    assertEquals(initialCount + 1, countRowsInTable("speakers"));
    assertEquals(2, countRowsInTable("conference_speakers"));

    // the remove:
    c1 = conferenceDao.get(c1.getId());
    c1.getSpeakers().remove(s);

    flushHibernate();

    assertEquals("count should stay the same", initialCount + 1, countRowsInTable("speakers"));
    assertEquals(1, countRowsInTable("conference_speakers"));

    c1 = conferenceDao.get(c1.getId());
    c2 = conferenceDao.get(c2.getId());

    assertEquals(0, c1.getSpeakers().size());
    assertEquals(1, c2.getSpeakers().size());
}

ошибка брошена, когда удаление s от c1.speakers обработан, потому что Зимуют, удаляет и ряд в столе соединения и эти спикеры строка таблицы также:

ОТЛАДКА org.hibernate. SQL - удаляют из conference_speakers где conference_id =? и speaker_id=?
DEBUG org.ibernate.SQL - удаление из динамиков, где id =?

Если изменить значение cascade = «all-delete-orphan» на cascade = «all» , то этот тест будет работать так, как ожидалось, хотя и приведет к нежелательному поведению, когда в конечном итоге в таблице динамиков окажутся потерянные строки.

Это заставляет меня задуматься - возможно ли для Hibernate знать, когда удалить осиротевшие объекты с дочерней стороны отношения, но только тогда, когда на ребенка не ссылаются другие родители (находятся ли эти родители в текущей сессии )? Возможно, я неправильно использую cascade = «all-delete-orphan» ?

Я получаю такое же точное поведение, если я использую аннотации JPA вместо сопоставления XML, например:

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "conference_speakers",
        joinColumns = @JoinColumn(name = "conference_id"),
        inverseJoinColumns = @JoinColumn(name = "speaker_id"))
@org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private Set<Speaker> speakers = new HashSet<Speaker>();

Это с Hibernate 3,6,7 .Final, по пути.

10
задан matt b 30 September 2011 в 17:30
поделиться