C # BackgroundWorker запись потока в Excel 2007 через сервер отправки сообщений - PullRequest
1 голос
/ 12 июня 2011

Буду признателен за некоторые взгляды на следующий дизайн:

У меня есть сервер, который постоянно отправляет сообщения, на которые я написал сборку C #, чтобы подписаться на нее.В настоящее время, когда бы ни отправлялись какие-либо сообщения, я буду записывать их асинхронно в MS Excel 2007. Поскольку это трудоемкий процесс, я использовал поток фонового рабочего для обработки соединения с сервером и получения сообщений перед записью в Excel.

public static void bw_DoWork(object sender, DoWorkEventArgs e)
    {
        //This method will establish conn to server, and subscribe to the messages sent asynchrously.
        //After which, createSpreadsheet(String msg) will be called to write the message to excel
        runMsgServerConsumer();

    }

Вопрос: Это хороший дизайн?В качестве альтернативы у меня есть возможность позволить основному потоку установить соединение с сервером и позволить фоновому потоку обработать запись, чтобы преуспеть через createSpreadsheet (String msg).

1 Ответ

0 голосов
/ 12 июня 2011

Я подозреваю, что это не будет иметь большого значения, особенно если Excel автоматизируется в видимом режиме и постоянно отображает все эти ячейки с новыми данными в них, отображая графики и т. Д. Автоматизация COM это довольно тяжелово всяком случае и наверняка затопит любую загрузку от подписки на серверный поток, который получает данные.Одной из причин отсоединения получения данных от вызовов Excel может быть то, что ваши входные данные имеют тенденцию поступать большими пакетами, и в этом случае ссылка в очереди между двумя потоками улучшит производительность и, возможно, загрузку, так как в одну ячейку можно записать больше ячеекВызов в Excel, (не уверен насчет этого - вам нужно попробовать).

Я использовал это приложение для анализа / отображения результатов испытаний в телекоммуникационной системе.Это работало хорошо.Я удалил источник данных и запустил автоматизацию в основном потоке, связывая данные с PostMessage (весь неуправляемый код Delphi).Не пробовал это в C #.

Можете ли вы просто проверить это и посмотреть, падает ли нагрузка / производительность?

Rgds, Martin

...