Generația structurii registrului de lucru încărcat
Generațiile structurale permit unui cititor să rețină instantanee ieftine și să respingă parcurgerea după ce topologia registrului de lucru de care depinde s-a schimbat
Sursele generațiilor
| Motor | Generația depozitului de celule | Generația colecției de foi de lucru |
|---|---|---|
| Classic XLS | TXLSWorksheet.CellStructureGeneration | TXLSWorksheets.StructureGeneration |
| XLSX | TXLSXWorksheet.CellStructureGeneration sau TXLSXCells.StructureGeneration | TXLSXSheets.StructureGeneration |
Fiecare proprietate este o valoare UInt64 doar-citire, iar cantitatea exactă cu care se schimbă nu este contractuală
Operații care invalidează
Crearea, eliminarea sau golirea celulelor stocate schimbă generația depozitului de celule când topologia se schimbă efectiv
Inserarea și ștergerea de rânduri sau coloane, mutarea coordonatelor, adăugarea sau materializarea împachetată și reconstruirile explicite ale indicelui de celule invalidează de asemenea starea de parcurgere a depozitului de celule
Adăugarea, ștergerea, mutarea sau golirea foilor de lucru schimbă generația colecției de foi de lucru când colecția se schimbă efectiv
Operații care nu invalidează
Schimbarea valorii, formulei, valorii din cache sau formatului unei celule existente nu schimbă generația depozitului de celule al acesteia
Redenumirea sau activarea unei foi de lucru nu schimbă generația colecției de foi de lucru, iar mutările fără efect, ștergerile lipsă sau golirea unei colecții deja goale păstrează generația curentă
Validare
Apelați XlsValidateStructureGeneration înainte de a avansa sau de a citi starea de parcurgere creată pentru o generație anterioară
O nepotrivire ridică EXLSLoadedCellCursorInvalidated, permițând apelanților să distingă invalidarea structurală de erorile de date sau de format
ExpectedGeneration := Worksheet.CellStructureGeneration;
{ Read or retain traversal state }
XlsValidateStructureGeneration(
ExpectedGeneration,
Worksheet.CellStructureGeneration);
Cursorul registrului de lucru clasic
IXLSWorkbook.CreateLoadedCellCursor capturează generația agregată a registrului de lucru clasic și o validează înainte de fiecare apel MoveNext și Current
Cursorul traversează direct ramurile alocate ale stocării rare, cu stare de cursor constantă, și returnează valori TXLSLoadedCellSnapshot deținute
Supraîncărcarea booleană îngheață dacă golurile stocate cu stil independent sunt incluse; formatele moștenite de rând, coloană și foaie de lucru nu creează intrări goale în cursor
Cursorul registrului de lucru XLSX
TXLSXWorkbook.CreateLoadedCellCursor capturează un lease pe durata de viață a registrului de lucru și o generație agregată de topologie partajată de toate depozitele de celule ale foilor de lucru și de colecția foilor de lucru
Calea materializată citește direct blocurile rare de rânduri, în timp ce calea împachetată reutilizează iteratorul împachetat fără a materializa celule sau a reține pointeri interni în instantanee
Supraîncărcarea booleană poate include goluri stocate doar cu stil în oricare reprezentare de stocare, în timp ce placeholder-ele Empty și Null fără stil rămân excluse
Eliberarea registrului de lucru invalidează lease-ul său înainte ca stocarea foilor de lucru să fie eliberată, astfel încât accesul ulterior la cursor ridică EXLSLoadedCellCursorInvalidated
Limita de concurență
Verificările de generație oferă doar detecție fail-fast și nu fac mutația și parcurgerea concurentă ale registrului de lucru sigure pentru fire de execuție