データベースからビジネス モデル エンティティを取得し、それらを繰り返して文字列を検索しようとしています。ただし、私のローカルホストでは、この操作には約7 to 9 seconds for 500 objects
.
public List<FileFolder> SearchFolders(int id, string searchString)
{
/* Placeholder that references folders that passes search criteria */
List<FileFolder> addedFolders = new List<FileFolder>();
/* Get the folder with specified id, also include Folders
* that this folder has. No problem here works perfectly fine
* and fast */
FileFolder folder = dbSet.Include("Folders").
.Where(q => q.FileFolderID == id)
.ToList().FirstOrDefault();
/* This takes too much time as I mention, up to 9 seconds
* for 500 Folders */
foreach (FileFolder f in folder.Folders)
{
if (f.Name.Contains(searchString))
{
addedFolders.Add(f);
}
}
return addedFolders;
}
取得したデータをリストに変換しているので、すべてのデータがメモリにあると安全に言えますか? そのため、foreach ループは、フォルダーへのアクセス中にこれ以上 db 呼び出しを行うべきではありません。また.Include
、方法を確認しましたが、正常に機能しています。
この遅い反復の原因は何でしょうか?
ありがとう。