QA@IT

SharePointで大きなサイズのファイルを扱う方法

2395 PV

はじめまして。

現在Metroスタイルアプリ(もうMetroという名称ではありませんが分かりやすいので利用させていただきます。)の開発をしており、その中でSharePointとの連携をする機能をC#で実装しています。
その中で、サイト上にあるファイルをローカルにダウンロードするためにGetItemAsyncメソッドでファイルを読み込んだ上で、読み込んだ情報をローカルにCreateしたファイルに書き込むようなつくりにしています。
しかし、大きなサイズのファイルを読み込もうとすると読み込みの時点でエラーになってしまいます。

256MBのファイルで試した際にはOutOfMemoryになり、512MBでは"failed to allocate a managed memory buffer of 1073741824 bytes.the amount of available memory may be low."という内容のエラーになります。(InnerExceptionはOutOfMemoryです。)
上記のエラーが発生する際にクライアントのパフォーマンスを観察すると、アプリのメモリ使用量は最初は数十MB程度だったのが、GetItemAsyncの部分に差し掛かると少ししてから徐々に上がり始め、1GBほどの使用量になるとそのままExceptionになってしまいます。
アップロード機能のためにCopyIntoItemsAsyncメソッドを使用する際にも同様の状態になります。

SharePointやIIS側のweb.configなどでは最大使用量もろもろを2GBほどに設定しており、普通にサイト上から約2GBのファイルをアップロードすることは可能です。
また、アプリ側からも50MBなら正常に終了することを確認しています。
最終的に2GBまでのファイル操作を許容させたいと考えているため、現在の有様に困り果てています。

ロジック側からサイトに対して大きなサイズのファイルのダウンロード/アップロードをする際に、クライアントのメモリが逼迫する状態を可能な限り回避する方法がありましたらご教示願います。

ウォッチ

この質問への回答やコメントをメールでお知らせします。