Lebih

Men-debug penggunaan memori FMW di dekat Transformers berbasis Grup

Men-debug penggunaan memori FMW di dekat Transformers berbasis Grup


Saya memiliki file FMW FME besar yang menggunakan banyak memori saat runtime. Saya telah ditugaskan untuk mencoba menemukan cara untuk mengurangi jejak memori.

Di awal meja kerja ada (apa yang saya asumsikan adalah) transformator berbasis grup - LineOnAreaOverlayer, yang mencari garis yang memotong poligon. Saya menduga bahwa sifat berbasis grup dari transformator ini mendorong penggunaan memori, karena ribuan fitur yang dimasukkan ke dalamnya perlu disimpan dalam memori dan diproses sekaligus (setidaknya itulah teorinya). Tujuan saya adalah untuk menghentikan pemrosesan ketika fitur adalah keluaran pertama dari transformator ini untuk melihat berapa banyak memori yang digunakan pada saat ini. Saya menggunakan titik inspeksi pada output transformator.

Namun, sepertinya saya juga tidak mengerti transformator berbasis grup atau titik inspeksi. Saya menghentikan pemrosesan pada fitur pertama yang merupakan keluaran dari transformator, dan fitur konektor diperhitungkan di FMW lainnya, semua fitur acara telah melalui transformasi dan sedang ditulis. Saya pikir semua fitur input dicadangkan di depan LineOnAreaOverlayer sebelum hal lain terjadi?

Adakah yang bisa membantu saya mengklarifikasi ini? Juga, informasi berguna lainnya tentang pelacakan penggunaan memori di FMW akan sangat dihargai - saat ini satu-satunya pilihan saya adalah nomor penggunaan memori puncak log atau mencoba mencocokkan log procmon dengan log fme, yang akan menjadi tugas yang membosankan.


Jawaban singkatnya adalah, jangan gunakan transformator berbasis grup dengan kumpulan data besar. Karena sifatnya, setiap transformator berbasis kelompok bertindak sebagaiFiturPemegang, yang berarti bahwa semua yang dikirim ke sana harus dihentikan dan disimpan di RAM sementara menunggu semuanya dibaca.

FMEPedia memiliki sedikit informasi tentang Transformer Berbasis Grup; dari Kekhawatiran Memori ia mengatakan:

Sebuah fitur dari transformator berbasis grup adalah bahwa mereka bertentangan dengan aturan umum FME, bahwa fitur diproses satu per satu, dan mengharuskan sejumlah fitur disimpan dalam memori pada satu waktu. Karena itu, trafo semacam itu lebih cenderung mengonsumsi sumber daya sistem dalam jumlah besar (beberapa seperti Clipper memiliki opsi tambahan untuk membantu mengurangi efek ini) tetapi dapat digunakan secara kreatif untuk menangani aliran fitur melalui ruang kerja.

Tanpa mengetahui secara spesifik ruang kerja Anda, saya hanya dapat menawarkan saran umum. Tetapi Anda mungkin ingin:

  • Jangan gunakan transformator berbasis grup jika memungkinkan dan Anda memiliki kumpulan data yang besar.
  • Hanya mengirim fitur yang benar-benar harus melalui Transformer berbasis grup ke transformator tersebut.
  • SQLCreatorberbasis grup, jadi jika Anda mendapatkan ratusan ribu fitur dengannya, itu akan memakan banyak RAM. Coba gunakan Pembaca FME yang sesuai jika memungkinkan.
  • Pisahkan beban kerja. Beberapa penggunaan yang cerdas dariWorkspaceRunner(pastikan untuk mengatur "Tunggu pekerjaan selesai: Ya") dapat mengurangi penggunaan memori dengan hanya memuat sebagian dari kumpulan data pada satu waktu. Tidak semua dataset dapat dipecah dan tetap memberikan output yang diinginkan.

Tonton videonya: Transformers Cyberverse 1-Step Changer Optimus Prime u0026 Bumblebee! #DuDuPopTOY