質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.79%

PHPExcelにおけるメモリ消費に関して

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,398

seijiro

score 6

PHPExcel初心者です。

PHPExcelを使うことで「メモリ消費」が1セル=1KB消費ということを諸々サイトを調べて認識しております。

PHPExcelを使うにあたりメモリ消費量の見積を算出したいのですが、
以下の点が認識できておりませんので、ご存知の方がおりましたらご教授願います。

・編集する対象のシートが増えれば、その分メモリ消費量が増えるのか
 
・メモリの消費が発生するのは、シート内の値を読み込むために発生するのか、それとも値の書き出しのために空のセルでもメモリ消費が発生するのか。

・セルのコピー等でシートを編集する場合に、メモリはシート全体のセル数分メモリを消費するのか、それとも現在対象のシート内のセルに値が書き出されているもののみメモリを消費するのか

よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • sakura_hana

    2019/04/11 19:40 編集

    元も子もない発言になりますが、なるべく実働環境と同等の環境で実際に適当なファイルを読ませて確認を取った方がいいかと思います。使用するPHPやPHPExcelのバージョンによっても異なるかもしれませんし。
    また、ざっくりググるとPHPExcelは非推奨という情報も出ます。
    https://teratail.com/help/question-tips こちらも併せてご確認ください。

    キャンセル

  • m.ts10806

    2019/04/11 21:04

    使用メモリを調べるやり方は幾らでもあるのでまずそちらを検証するところからやってみてください。

    キャンセル

回答 2

0

memory_get_peak_usage

PHP スクリプトに割り当てられたメモリの最大値を、バイト単位で返します。 

https://www.php.net/manual/ja/function.memory-get-peak-usage.php

この関数を使って、検証コードを書き、実際に計測してみましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

もし、なんらかの仕様書作成のために調査、記述しているのなら、PHP7.2以降は動きませんので、あしからず。

そうでない場合は、けっこう由々しき問題で、調べている人も多いので参考にしてみては?
PHPExcelのメモリ馬鹿食いについて

ちなみにPHPExcelは処理を開始して、そのメモリを開放するまでメモリが蓄積していきます。
ただし、それには条件があり、PHPでの処理の一環なので、PHPExcelとしてはメモリを
解放したつもりでも、PHPプログラムとして処理が続いている場合、メモリが蓄積されます。

よって

 processData($data); //任意の関数を使って、PHPExcelで処理

と一度に処理すると、次第にメモリは蓄積されいずれパンク(Fatal error: Allowed memory size of NNNNNNNNN bytes exhausted (tried to allocate NN bytes) in path_to_PHPExcel_class)するのに対し、

/*処理を分散し、メモリ蓄積リスクを軽減する*/
processData($data1);
processData($data2);
processData($data3);
processData($data4);

このように処理を分けると、メモリ解放のタイムラグができるため、メモリ蓄積によるパンクのリスクは軽減されます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.79%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る