メトロ アプリはローカル データベースを持つことができないため、世界の都市をリストに保存したいと考えていますが、それが可能かどうかはわかりません (300 万以上の都市を含むテキスト ファイルを見つけました)。
彼らは天気アプリでどうだったのだろうか。提案された結果 (検索チャームまたは「お気に入りの場所」画面) に潜在性がないため、Web サービスを使用していないと思います。また、アプリで都市のリストを提案できるようにしたいと考えています。利用可能な接続がない場合。
何か案が ?
メトロ アプリはローカル データベースを持つことができないため、世界の都市をリストに保存したいと考えていますが、それが可能かどうかはわかりません (300 万以上の都市を含むテキスト ファイルを見つけました)。
彼らは天気アプリでどうだったのだろうか。提案された結果 (検索チャームまたは「お気に入りの場所」画面) に潜在性がないため、Web サービスを使用していないと思います。また、アプリで都市のリストを提案できるようにしたいと考えています。利用可能な接続がない場合。
何か案が ?
300万の都市はたくさんのように聞こえるかもしれません。しかし、それはあなたのメトロアプリにとってたくさんですか?
これらは非常に大まかな見積もりです
20ユニコード文字の平均的な都市名の長さを使用してみましょう。
20*300万=6000万のUnicode文字。
6000万*ユニコード文字あたり2バイト=1億2000万バイト。
1億2000万バイト/1024=117,187.5キロバイト
117,187.5キロバイト/1024=114メガバイト
〜115mbは正確に「小さい」わけではありませんが、他の要件によっては、おそらく150mbのメモリへのロードを処理できます。Listなどの通常使用する.NETオブジェクトを使用し、LINQを使用して一致する都市などを取得できます。
これがあなたの唯一の選択肢であると言っているわけではありません。それはおそらく実行可能なものです。すべてを一度にメモリに取り込むことを避けるためにできる非常に賢いことがたくさんあります。しかし、ラグを排除/最小化したい場合は、それが最善の策になります。
データベースが必要な場合は、SQLite を調べることをお勧めします。Metro アプリケーションは、明らかに SQL Server やその他の Win32 ベースの DBMS にアクセスできませんが、軽量の代替手段として SQLite を試すことができます。
これを試してください: https://github.com/doo/SQLite3-WinRT
行で区切られたテキストファイルに貼り付けるだけです。これは大量のデータではありません。一度にすべてを RAM に保持できる可能性があります。
この 1 つのリストのためだけにデータベースを使用するのは、少しやり過ぎに思えます。
それぞれ約 20 文字の名前を想定して大まかに計算すると、約 100 MB の都市データの領域にいます。メモリ内の 1 つのリストにとって、これは取るに足らないことではありません。
Linq to Textプロバイダー のようなものを使用できる場合もあります。
LinqConnect (SQLite をサポートするDevartの LINQ to SQL 互換ソリューション) でSQLite データベースを使用することをお勧めします。当社の製品では、LINQ および ADO.NET インターフェイスを使用できます。バージョン 4.0 以降、LinqConnect は Windows Metro アプリケーションをサポートしています: http://blogs.devart.com/dotconnect/linqconnect-for-metro-quick-start-guide.html。