C++-ban a prezentáció BLOB-ok kezelése a hatékony memóriahasználatért
Áttekintés
Az Aspose.Slides BLOB-alapú kezelést biztosít a prezentációkban lévő nagy bináris adatokhoz, hogy csökkentse a memóriahasználatot nagy képek, hangok, videók és prezentációs fájlok feldolgozása során.
Ez a cikk bemutatja, hogyan használható a BLOB-alapú feldolgozás nagy médiák hozzáadásához egy prezentációhoz, nagy médiák exportálásához a prezentációból, és nagy prezentációk hatékonyabb betöltéséhez. Emellett elmagyarázza, hogyan használhatók ideiglenes fájlok a feldolgbás során, és hogyan változtatható meg a tárolásukhoz használt mappa.
A BLOB-ról
BLOB (Binary Large Object) általában egy nagy elem (fotó, prezentáció, dokumentum vagy média), amely bináris formátumban van tárolva.
Az Aspose.Slides for C++ lehetővé teszi, hogy BLOB-okat használjon objektumokhoz úgy, hogy csökkentse a memóriahasználatot nagy fájlok esetén.
BLOB használata a memóriahasználat csökkentésére
Nagy fájl hozzáadása BLOB-on keresztül egy prezentációhoz
Az Aspose.Slides for C++ lehetővé teszi, hogy nagy fájlokat (ebben az esetben egy nagy videofájlt) a BLOB-okat magában foglaló folyamaton keresztül adjunk hozzá a memóriahasználat csökkentése érdekében.
Ez a C++ kód megmutatja, hogyan lehet egy nagy videofájlt a BLOB folyamattal egy prezentációhoz hozzáadni:
const String pathToVeryLargeVideo = u"veryLargeVideo.avi";
// Létrehozza az új prezentációt, amelyhez a videót hozzáadjuk
auto pres = System::MakeObject<Presentation>();
auto fileStream = System::MakeObject<FileStream>(pathToVeryLargeVideo, FileMode::Open);
// Adjunk hozzá videót a prezentációhoz - a KeepLocked viselkedést választottuk, mert
// nem szándékozunk hozzáférni a "veryLargeVideo.avi" fájlhoz.
auto video = pres->get_Videos()->AddVideo(fileStream, LoadingStreamBehavior::KeepLocked);
pres->get_Slides()->idx_get(0)->get_Shapes()->AddVideoFrame(0.0f, 0.0f, 480.0f, 270.0f, video);
// Mentse a prezentációt. Miközben egy nagy prezentáció kerül kimenetre, a memóriahasználat
// alacsony marad a pres objektum életciklusa során
pres->Save(u"presentationWithLargeVideo.pptx", SaveFormat::Pptx);
Nagy fájl exportálása BLOB-on keresztül egy prezentációból
Az Aspose.Slides for C++ lehetővé teszi, hogy nagy fájlokat (ebben az esetben egy hang- vagy videofájlt) a BLOB-okat magában foglaló folyamaton keresztül exportáljunk a prezentációkból. Például előfordulhat, hogy ki kell nyernünk egy nagy médiafájlt a prezentációból, de nem szeretnénk, hogy a fájl betöltődjön a számítógép memóriájába. A fájl BLOB folyamattal történő exportálásával alacsony memóriahasználatot érhetünk el.
Ez a C++ kód bemutatja a leírt műveletet:
const String hugePresentationWithAudiosAndVideosFile = u"Large Video File Test1.pptx";
auto loadOptions = System::MakeObject<LoadOptions>();
loadOptions->get_BlobManagementOptions()->set_PresentationLockingBehavior(PresentationLockingBehavior::KeepLocked);
// Létrehoz egy Presentation példányt, és zárolja a "hugePresentationWithAudiosAndVideos.pptx" fájlt.
auto pres = System::MakeObject<Presentation>(hugePresentationWithAudiosAndVideosFile, loadOptions);
// Mentsük le minden videót egy fájlba. A magas memóriahasználat elkerülése érdekében egy puffert kell használnunk
// hogy az adatot a prezentáció videófolyamából egy újonnan létrehozott videofájl streamjébe továbbítsuk.
auto buffer = System::MakeArray<uint8_t>(8 * 1024, 0);
// Végig iterál a videókon
for (int32_t index = 0; index < pres->get_Videos()->get_Count(); ++index)
{
auto video = pres->get_Videos()->idx_get(index);
// Megnyitja a prezentáció videófolyamát. Kérjük, vegye figyelembe, hogy szándékosan kerültük el a metódusok elérését
// mint a video->get_BinaryData - mivel ez a metódus egy teljes videót tartalmazó bájt tömböt ad vissza, ami
// memóriába tölti be a bájtokat. A video->GetStream-et használjuk, amely visszaad egy Stream-et – és NEM
// igényli, hogy az egész videót a memóriába töltsük.
auto presVideoStream = video->GetStream();
auto outputFileStream = File::OpenWrite(String::Format(u"video{0}.avi", index));
int32_t bytesRead;
while ((bytesRead = presVideoStream->Read(buffer, 0, buffer->get_Length())) > 0)
{
outputFileStream->Write(buffer, 0, bytesRead);
}
// A memóriahasználat alacsony marad a videó vagy a prezentáció méretétől függetlenül,
}
// Szükség esetén ugyanazokat a lépéseket alkalmazhatja audio fájlokra is.
Kép hozzáadása BLOB-ként egy prezentációhoz
Az IImageCollection interfész és a ImageCollection class metódusaival nagy képet adhatunk hozzá adatfolyamként, így azt BLOB-ként kezelve.
Ez a C++ kód megmutatja, hogyan lehet egy nagy képet a BLOB folyamattal hozzáadni:
const String pathToLargeImage = u"large_image.jpg";
// létrehozza az új prezentációt, amelyhez a képet hozzáadjuk.
auto pres = System::MakeObject<Presentation>();
auto fileStream = System::MakeObject<FileStream>(pathToLargeImage, FileMode::Open);
// Adjunk hozzá képet a prezentációhoz - a KeepLocked viselkedést választjuk, mert
// nem szándékozunk hozzáférni a "largeImage.png" fájlhoz.
auto img = pres->get_Images()->AddImage(fileStream, LoadingStreamBehavior::KeepLocked);
pres->get_Slides()->idx_get(0)->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 0.0f, 0.0f, 300.0f, 200.0f, img);
// Mentse a prezentációt. Miközben egy nagy prezentáció kerül kimenetre, a memóriahasználat
// alacsony marad a pres objektum életciklusa során
pres->Save(u"presentationWithLargeImage.pptx", SaveFormat::Pptx);
Memória és nagy prezentációk
Általában egy nagy prezentáció betöltéséhez a számítógépeknek sok ideiglenes memóriára van szükségük. A prezentáció teljes tartalma betöltődik a memóriába, és a fájl (amelyből a prezentáció betöltődött) már nem használatos.
Gondoljunk egy nagy PowerPoint prezentációra (large.pptx), amely egy 1,5 GB-os videofájlt tartalmaz. A prezentáció betöltésének szabványos módja ebben a C++ kódban van leírva:
auto pres = System::MakeObject<Presentation>(u"large.pptx");
pres->Save(u"large.pdf", SaveFormat::Pdf);
Azonban ez a módszer körülbelül 1,6 GB ideiglenes memóriát fogyaszt.
Nagy prezentáció betöltése BLOB-ként
A BLOB-ot magába foglaló folyamat segítségével kevés memóriával betölthetünk egy nagy prezentációt. Ez a C++ kód leírja a megvalósítást, ahol a BLOB folyamatot használják a nagy prezentációs fájl (large.pptx) betöltésére:
auto blobManagementOptions = System::MakeObject<BlobManagementOptions>();
blobManagementOptions->set_PresentationLockingBehavior(PresentationLockingBehavior::KeepLocked);
blobManagementOptions->set_IsTemporaryFilesAllowed(true);
auto loadOptions = System::MakeObject<LoadOptions>();
loadOptions->set_BlobManagementOptions(blobManagementOptions);
auto pres = System::MakeObject<Presentation>(u"large.pptx", loadOptions);
pres->Save(u"large.pdf", SaveFormat::Pdf);
Az ideiglenes fájlok mappájának módosítása
A BLOB folyamat használatakor a számítógép ideiglenes fájlokat hoz létre az alapértelmezett ideiglenes fájlok mappájában. Ha más mappában szeretné tárolni az ideiglenes fájlokat, a TempFilesRootPath használatával módosíthatja a tárolási beállításokat:
auto blobManagementOptions = System::MakeObject<BlobManagementOptions>();
blobManagementOptions->set_PresentationLockingBehavior(PresentationLockingBehavior::KeepLocked);
blobManagementOptions->set_IsTemporaryFilesAllowed(true);
blobManagementOptions->set_TempFilesRootPath(u"temp");
auto loadOptions = System::MakeObject<LoadOptions>();
loadOptions->set_BlobManagementOptions(blobManagementOptions);
Info
Ha aTempFilesRootPath-t használja, az Aspose.Slides nem hoz létre automatikusan mappát az ideiglenes fájlok tárolásához. A mappát manuálisan kell létrehoznia.
A prezentáció objektumainak eldobása a memória felszabadításához
Nagy prezentációk feldolgozásakor győződjön meg róla, hogy a Presentation példány megfelelően el van dobva, hogy a foglalt memória felszabaduljon. Hívja meg a Dispose() metódust a prezentáció használatának befejezése után a nem kezelt erőforrások felszabadításához.
auto presentation = System::MakeObject<Presentation>(u"large.pptx");
// ...process the presentation...
presentation->Save(u"large.pdf", SaveFormat::Pdf);
// Explicitly release resources.
presentation->Dispose();
GYIK
Mely adatok egy Aspose.Slides prezentációban BLOB-ként kerülnek kezelve, és BLOB beállítások vezérlik?
A nagy bináris objektumok, például képek, hang és videó BLOB-ként kezelhetők. A teljes prezentációs fájl is BLOB kezelést igényel a betöltés vagy mentés során. Ezeket az objektumokat BLOB szabályzatok szabályozzák, amelyek lehetővé teszik a memóriahasználat kezelését és szükség esetén az adatokat ideiglenes fájlokba helyezni.
Hol konfigurálhatom a BLOB kezelési szabályokat a prezentáció betöltése során?
Használja a LoadOptions és a BlobManagementOptions kombinációját. Itt állíthatja be a BLOB memóriahatárát, engedélyezheti vagy tiltja az ideiglenes fájlokat, kiválaszthatja az ideiglenes fájlok gyökérútvonalát, és beállíthatja a forrás zárolásának viselkedését.
A BLOB beállítások befolyásolják a teljesítményt, és hogyan egyensúlyozhatok a sebesség és a memória között?
Igen. A BLOB memóriában tartása maximalizálja a sebességet, de növeli a RAM használatát; a memóriahatár csökkentése több munkát helyez át az ideiglenes fájlokra, ezáltal csökkentve a RAM-ot, de több I/O-val jár. Használja a set_MaxBlobsBytesInMemory metódust a megfelelő egyensúly eléréséhez a terhelés és a környezet szerint.
Segítenek a BLOB beállítások, ha rendkívül nagy prezentációkat (pl. gigabájtok) nyitunk meg?
Igen. A BlobManagementOptions ezekre a helyzetekre lett tervezve: az ideiglenes fájlok engedélyezése és a forrászárolás használata jelentősen csökkentheti a csúcs RAM használatot és stabilizálhatja a feldolgozást nagyon nagy prezentációk esetén.
Használhatok BLOB szabályzatokat, ha áramlásokból (stream) töltök be a lemezfájlok helyett?
Igen. Ugyanazok a szabályok érvényesek az áramlásokra is: a prezentáció példány birtokolhatja és zárolhatja a bemeneti stream-et (a választott zárolási mód függvényében), és az ideiglenes fájlok használata engedélyezett esetben megtörténik, ezáltal a memóriahasználat előre meghatározható a feldolgozás során.