EPPlus Vaste ensemble de données d'un Problème avec la Mémoire de l'Exception
Système de Mémoire Exception. Je vois le Flux de mémoire n'est rincé lors de l'enregistrement. Nous avons 1,5 - 2 GO ensembles de données.
Je suis en utilisant EPPlus Version 3.1.3.0
Nous ne le suit dans le code.
Nous bouclons
--> Create a Package
--> each table in the datareader
--> Add WorkSheet to the Package
--> Dispose Each table.
--> Save the Package.
Chaque Datatable est de 300Mg de la Taille jusqu'à 15 Tables de forme sur le Système.
Cela pose un problème, je me suis connecté en détail @ https://epplus.codeplex.com/workitem/15085
Je veux toujours être en mesure d'utiliser EPPlus sa très belle API. mais est-il une meilleure façon de libérer une feuille de calcul une fois que nous l'ajouter à l'ensemble.
Je vous remercie pour votre aide.
OriginalL'auteur bhushanvinay | 2014-11-06
Vous devez vous connecter pour publier un commentaire.
J'ai eu ce problème, mais je l'ai corrigé en changeant l'option de "
Platform target
", à partir dex86
àx64
ou "Any CPU
". ( clic droit sur le projet, puis sélectionnez "Propriétés", puis l'onglet "Build", puis sur "la Plate-forme cible", sélectionnez "x64" )Le problème c'est que pour la plate-forme
x86
vous pouvez utiliser seulement environ 1,8 GO de RAM. Pour la plate-formex64
, vous n'avez pas cette limitation.OriginalL'auteur Grigore Cosmin Magerusan
Malheureusement, cela semble être une limitation importante de la EPPlus - vous pouvez en trouver d'autres de poster ce sujet sur leur site codeplex page. J'ai rencontré un problème similaire lors de l'exportation grand jeu de données - tables avec 115+ colonnes de large et 60K+ lignes de hauteur. Généralement autour de 30 à 35 lignes, c'est quand il a couru hors de la mémoire. Ce qui se passe est que chaque cellule qui est créé est-il propre de l'objet, ce qui est bien pour les petits dataset, mais dans mon cas il serait 115x60K= ~7 millions de dollars. Car chaque cellule est un objet avec le contenu (la plupart des chaînes de caractères) empreinte mémoire ajoute rapide.
À un certain moment dans l'avenir, mon plan était de créer les fichiers XML manuellement à l'aide de Linq2Xml. Un xlsx est juste un fichier zip renommé avec des fichiers XML qui composent le contenu du classeur et des feuilles de calcul. Ainsi, vous pouvez créer un vide xlsx à l'aide de la PPE, l'enregistrer, ouvrir en tant que zip, sortir sheet1.xml et d'ajouter du contenu des données via la manipulation de la chaîne. Vous devez également avoir à travailler sur la sharedstring.xml fichier Excel utilise pour aider à garder la taille du fichier en bas. Il y a probablement d'autres fichiers xml qui aura besoin de la mise à jour et avec des clés ou nom.
Si vous renommez les xlxs à un .extension zip vous pouvez voir ce.
Exemple sheet1.xml:
Exemple sharedstrings.xml:
Vous pouvez voir comment j'ai fait de manipulation de xml dans mon autre post:
Créer un Tableau croisé dynamique Avec les Filtres EPPLUS
Désolé je ne pourrais pas vous donner une meilleure réponse, mais j'espère que ça aide.
OriginalL'auteur Ernie
@Ernie est correct au sujet de certaines limitations de la version actuelle de EPPlus. Ils ont reconnu que, et ont été travailler sur la fixation. Cela vous laisse avec une des deux options possibles pour l'obtention de ce travail:
1) passer à la EPPlus 4.0 Bêta, où ils ont résolu ce problème, ainsi que quelques autres choses aussi (bien que vous serez à l'aide d'une version bêta).
2) Le
ExcelPackage
etExcelWorksheet
classes à la fois de mettre en œuvreIDisposable
, de sorte que vous pourriez commencer à obtenir de meilleures performances si vous enveloppez de votre utilisation d'entre eux dans unusing()
déclaration.EPPlus 4.1.0 ne pas le résoudre. Et displosing n'aide pas, si vous avez seulement 1 feuille pour écrire.
OriginalL'auteur IronMan84
Payer attention si vous êtes de passage ruisseaux de la ExcelPackage. Dans mon cas, j'ai eu un windows-service, le chargement de Paquets à l'aide d'un memorystream. Maintenant, le service s'est écrasé après un certain temps avec un dépassement de mémoire exception.
Raison: La dispose de la ExcelPackage ne pas jeter les flux!
Solution:
OriginalL'auteur Peter Widmer
Le problème est parfois présent lors du débogage de grandes quantités de données.
Si vous essayez de l'application dans le serveur dans le vrai
IIS
ou dans votre PC dans tru IIS si vous avez la
Win PRO
éditionle problème sur
OutOFMemoryException
ne se produit pas.OriginalL'auteur daniele3004