2009-12-07 14 views
5

Pracuję nad aplikacją, która generuje stosunkowo dużą ilość danych wyjściowych programu Word. Obecnie używamy usług Word Interop do tworzenia dokumentów, ale jest dość powolny, szczególnie w starszych (przed 2007) wersjach pakietu Office. Chcielibyśmy przyspieszyć generację.Jak przyspieszyć generowanie plików Word z C#?

Nie zrobiłem jeszcze wiele profilowania, ale jestem przekonany, że problem polega na tym, że wykonujemy mnóstwo wywołań COM. Mam nadzieję, że profilowanie przyniesie podzbiór wywołań, które są wolniejsze od innych, ale moje jelito mówi mi, że to prawdopodobnie kwestia narzutu COM (lub narzutu Interopu), a nie tylko kilku powolnych wywołań.

Produkt może również generować dane wyjściowe HTML, a ten proces (a) jest bardzo szybki i (b) używa prawie tych samych ścieżek kodowania, tylko z inną podklasą dla elementów funkcjonalnych specyficznych dla HTML. Więc jestem prawie pewien, że nasz algorytm nie jest zasadniczo wolny.

Poszukuję propozycji alternatywnych sposobów przyspieszenia generowania plików Word.

Nie możemy zmienić nazwy wygenerowanych plików HTML na .doc, a zamiast tego nie możemy wygenerować RTF - w obu przypadkach ważne informacje na temat formatowania zostają utracone, aw przypadku RTF znaki graficzne nie działają mocno.

Jednym z podejść, które oceniamy jest programowe generowanie i otwieranie pliku Word (za pośrednictwem współdziałania) z szablonu, który ma makro, które wie, jak spożywać płaski plik i utworzyć wymagane dane wyjściowe. Interesują nas opinie na temat tego podejścia, a także wszelkie inne pomysły na przyspieszenie działań.

Odpowiedz

5

Jeśli możesz sobie na to pozwolić, polecam produkt Aspose.Words. Bardzo szybko i program Word nie musi być zainstalowany.

Również znacznie łatwiejsze w użyciu niż interop biurowy.

+0

Chciałbym z niego skorzystać, ale cena jest ograniczona do naszych szczególnych potrzeb - nasza aplikacja to aplikacja komputerowa, a więc 2500 USD/programista. –

+0

Tak, wiem co masz na myśli. Trzeba dużo skręcania rękoma, aby narzędzia były tak drogie. Jeden fragment kodu, który napisałem, zabrał mi około 4 godzinek. Podejrzewam, że zajęłoby mi to tydzień, aby wszystko działało dobrze i wolno. Czuję, że nasze pieniądze są warte naszej ceny. – Crispy

1

Twoje podejście makrowe jest dokładnie tym, w jaki sposób przyspieszyliśmy współpracę między programami powolnymi (używając wersji 2003, jak sądzę).

Znaleźliśmy (przynajmniej z programu Excel), że wiele z powolności wynika z powtarzających się pojedynczych połączeń przez interop. Zaczęliśmy gromadzić polecenia (tj. Formatować duże zakresy, a następnie zmieniać określone komórki zgodnie z wymaganiami, zamiast formułować każdą komórkę indywidualnie) i logicznie przejść do makr.

Myślę, że podejście makro + szablon z przyjemnością przetłumaczyć.

+0

Fajnie ... jak sobie poradziłeś z przekazywaniem danych z aplikacji .NET do makra? –

+0

Z pamięci próbowaliśmy przesyłać dane przy minimalnej liczbie połączeń międzyoperacyjnych. Być może, jeśli masz szczęście, możesz wypchnąć go w jednym bloku, a twoje makro przeanalizować i wykonać swoją działalność? – Gregory