問題タブ [fixeddocument]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wpf - VisualBrushは「遅延評価」を行いますか?
次のように、FixedDocumentをさらに多くの反復(反復ごとに1ページ)で作成します。
各反復で、MainGridを少し変更します。したがって、各ページにはMainGridの実際の状態が含まれている必要があります。ただし、印刷されたドキュメントには、最後の反復と同じ内容のページが含まれています(つまり、最後の状態はドキュメント内のすべてのページにあります)。VisualBrushなどの「遅延評価」はありますか?
pagination - レンダリング後の Flowdocument ページの破棄
上記のコードは何も解放しません。フロー ドキュメントがページ付けされ、ページのビジュアル表現がフェッチされると、フロー ドキュメントのコンテンツがビジュアルによって参照されます。そのため、ビジュアルもフロードキュメントの内容も破棄されません。上記のコードを実行すると、メモリ不足が継続的に発生しました。
これらすべてのリソースによって保持されているメモリを解放する方法を知っている人はいますか?
前もって感謝します。
wpf - FixedDocument を XPS ファイルに保存するとメモリ リークが発生する
特定のアクションを実行してレポートを生成する .NET Windows サービスを作成しました。これらのレポートは、特定のディレクトリに保存する XPS ドキュメントです。
WPF に精通しているため、レポートを作成するために選択した方法は、 をインスタンス化し 、必要に応じてコンテンツを含むオブジェクトをSystem.Windows.Documents.FixedDocument
追加することです。FixedPage
私の問題は、サービスのメモリ使用量が、実行中に時間の経過とともにどんどん増えていくということです。
最初に、すべての破棄可能なオブジェクトが破棄されることを確認するなど、コードを厳密に調べましたが、その他の明らかなメモリ リークの候補もありましたが、それでも問題がありました。次に、CLR プロファイラーを使用して、サービスのメモリ使用量を詳細に調べました。
サービスがこれらのレポートを生成し、それらを XPS ファイルとして保存すると、オブジェクト ( 、、、など) にFixedDocument
関連付けられたさまざまな UI 要素がすべてメモリに保持されることがわかりました。FixedDocument
Dispatcher
FixedPage
UIElementCollection
Visual
これは、WPF アプリで同じことを行った場合には発生しないようです。そのため、WPF アプリの外部で使用されている WPF UI ディスパッチャー モデルと関係があると思います。
FixedDocument
このようなサービス (または一般的に WPF アプリの外部) でオブジェクトを使用する場合、オブジェクトを「破棄」するにはどうすればよいですか?
========編集=========
OK、私のメモリ リークは、FixedDocument の作成/入力に特に関係していないことがわかりました。そうしても、実際には XPS としてディスクに保存しないと、メモリ リークは発生しません。したがって、私の問題は、XPSファイルとして保存することに関係しているに違いありません。
これが私のコードです:
私が試したこと:
- 手動ガベージ コレクション
UpdateLayout()
ページネーターを取得する前に各ページを呼び出しますmyFixedDocument
(以下の回答で示唆されているように)-ページネーターで はなく、myFixedDocument
直接渡そうとしましたWrite()
- これらのコード行を独自のスレッドに配置し、ディスパッチャーを手動でシャットダウンする
まだ運がありません。
========== 回避策 ==========
http://msdn.microsoft.com/en-us/library/system.appdomain.aspxの例に示されている一般的な方法を使用して上記のコードを独自の AppDomain に分離することにより、メモリ リークはサービスに影響しなくなりました (私はまだ発生しているため、「もう影響はありません」と言いますが、AppDomain がアンロードされると、リークされたすべてのリソースがアンロードされます)。
私はまだ本当の解決策を見たいと思っています。
(関連する注意事項として、別の AppDomain を使用すると、特定の XPS ファイルを PDF ファイルに変換するために使用していた PDFSharp コンポーネントでメモリ リークが発生しました。PDFSharp は、通常の状況では拡大しないグローバル フォント キャッシュを使用することが判明しました。しかし、これらの AppDomains を使用した後、キャッシュはどんどん大きくなっていきました. PDFSharp のソース コードを編集して、FontDescriptorStock と FontDataStock を手動でクリアできるようにし、問題を解決しました.)
========== ソリューション ==========
最終的な解決策については、以下の私の回答を参照してください。
.net - 大きなレポートを出力する WPF で OutOfMemoryException が発生する
毎月印刷する FixedDocument レポートを作成しました。平均して約 350 ページの長さで、約半分のページが ~200kb の jpeg 画像です。レポートは DocumentViewer でうまく表示されますが、印刷しようとすると問題が発生します。
使用時
たとえば、月のデータの最初の 3 分の 1 を印刷しようとすると、120ページ、問題なく使えます。しかし、月全体を試してみると、約160ページで次のエラーが発生します
次に、次を使用してドキュメントを小さな30ページのドキュメントに分割することにより、一度に30ページを印刷するだけでそれを裏切ると思いました。
しかし、それはまったく同じエラーを引き起こしました。中間点から月末に向かって100ページを印刷しようとしましたが、それは機能するため、特定の画像ではなくページの量である必要があります(画像はすべて1つのソースからのJPEGで、最大サイズは400kbです)。
一度に 30 ページを印刷する際のメモリ使用量を見ると、
その後、次のバッチで 1281Mb でクラッシュします
実際のプリンターと XPS Windows プリンターでテストしました。これらのメモリ値を書き留めたとき、各セクションが完全にスプールされて印刷されるまで待ちました。
それらを別々の個々のドキュメントに分割しているときに、なぜこのように構築されるのか理解できません。何かを処分しなければならないのですが、何がわかりませんか?
xps - XPと比較してWindows7でXPSFixedDocumentが異なって見える原因は何ですか?
FixedDocumentオブジェクトを生成し、それをXPSDocumentViewerに表示するプログラムがあります。MSDNのドキュメントによると、「固定ドキュメントは、使用するディスプレイやプリンタハードウェアに関係なく、正確な「表示されるものが得られるもの」(WYSIWYG)プレゼンテーションを必要とするアプリケーションを対象としています。」
しかし、それはまさに私が望んでいることです。
WindowsXPとWindows7のXPSDocumentViewersで同じドキュメントを開くと、ドキュメントの表示方法に大きな違いがあります。Windows 7バージョンは、より大きなフォントと要素間のより多くの間隔を使用しているようです。これを引き起こす原因は何ですか?FixedDocumentの目的は、OSやプリンターなどに関係なく、常に同じように見えることではありませんか?
私はこのテーマについてグーグルをしましたが、関連するものを見つけることができず、あなたが与えることができる提案に感謝します。
ありがとう!
c# - 固定ドキュメントのページ サイズ
Web から画像を取得して、FixedDocument ページに追加しています。私が引っ張っている画像のサイズは 1200px X 1500px です。ただし、FixedDocument では、画像は小さなサムネイルとして表示されます (スクリーン グラブを参照してください)。
以下にコード スニペットを示します。
サムネイルとしてではなく、その寸法に従って画像を表示する必要があります。サイズごとに画像を表示するために何をする必要があるか教えてください。
どうもありがとう。
c# - ドキュメントの動的ページ挿入を修正
ループ内の固定ドキュメント内に動的ページを挿入しようとしています
しかし、最初のページの後、エラーコンテンツはすでに別のコントロールの子です。固定ドキュメントにページを追加する方法を教えてください。ページの配列を作成するにはどうすればよいですか?
c# - wpf fixeddocument 動的データ
FixedDocument
ページを動的に作成して追加しています。
コードはまだ page1content が別の親の子であるというエラーを出しています。
c# - Xps ドキュメントのページ サイズを設定する方法
XPS ドキュメントをFixedDocumentで保存しようとしています。これまでのところ、ページサイズを変更できませんでした。カスタムサイズに変更するにはどうすればよいですか?
この質問に対する最初の回答に基づいてコードを作成しました。より具体的には、次のコードを使用しています。
ユーザー コントロールを XPS ドキュメントにコピーし、正常にコピーしますが、前述のとおり、既定の用紙サイズを使用します。
プロパティを使用しDocumentPaginator.PageSize
て新しいページ サイズを設定しようとしましたが (インスタンス化した後FixedDocument
)、そのプロパティに割り当てたものは無視されるようです。結果の XPS ドキュメントのページは、既定の用紙サイズを保持します。
段階的に実行すると、PageSize
プロパティの値が実際に変更されていることがわかります。そのため、新しい値がDocumentPaginator
.
さまざまなオンライン リソースを見つけましたが、いずれもまだ問題を解決していません。
- MS Social でのこのフォーラムの投稿では、プロパティの設定が機能すると主張しています
PageSize
が、私が知る限りではそうではありません。 - ドキュメントは、プロパティの設定が機能すると主張し、
PageSize
私が試したことと同じことを行う例を提供します。(それ以外は、このドキュメントページに基づいて、使用する数値の単位さえわかりません。) DocumentPage.Size
ドキュメントはプロパティも指していますが、そのプロパティは公開して変更することはできません。別のページ サイズを取得するためだけに、ドキュメントにページを追加する前に、ページ クラスをオーバーライドする必要がありますか?- このフォーラムへの投稿でも同じ問題が説明されていますが、その答えは私には無意味に思えます。
DocumentPaginator
プロパティを一度しか使用していないため、インスタンスを保存できる「(...).DocumentPaginator を再度呼び出す」ことはありません。 - この質問は有望に思えますが、実際にはページ サイズに関するものではなく、特定のページ上の画像の縮尺に関するものです。
- 前述の
PageSize
プロパティ (ここではデフォルトのサイズに設定されているようです) の他に、このチュートリアルではWidth
とのHeight
プロパティを使用しますFixedPage
。ただし、簡単なテストのためにこれらに正のランダム値を割り当てると、XPS ドキュメントが破損しているように見え、XPS Viewer でドキュメントを開くときにエラー メッセージが表示されます。
c# - 固定ドキュメントを作成するとメモリ リークが発生する
アプリケーションで WPF レポートを作成していますが、レポートを作成するたびにレポートがメモリに残ることがわかりました。ドキュメントの内容を完全に消去し、空の UserControl を 1 つだけ印刷しています。コードを最小限に減らしましたが、まだリークしています。私が何を間違っているのか、または何をしていないのか分かりますか?
プロファイリングは、ContextLayoutManager が ContextLayoutManager.LayoutQueue.Request の FixedPage で参照を保持していることに問題があることを示しています。
アドバイスをありがとう。