c# - 从对象列表中创建具有指定名称、路径和格式的文件
问题描述
我需要在我的机器上创建一堆文件,目前我有一个类型的对象列表,FileInfo
其中包含我需要创建的文件的名称、路径和格式。
解决此问题的最佳方法是什么?我正在考虑使用foreach
循环,但我的列表中有超过 700000 个对象,我不确定这是否是最佳选择。
这是我用来用对象填充列表的函数:
public static List<FileInfo> ReturnFileFromDBInfo()
{
var result = new List<FileInfo>();
SqlConnection conn = new SqlConnection();
conn.ConnectionString = @"data source = MYPC\SQLEXPRESS; database = MYDB; integrated security = TRUE";
conn.Open();
var query = "SELECT a.partNumber, b.fullPath,a.fileType,a.baseID FROM drawings a ,bases_bases b WHERE a.baseID = b.id";
var cmd = new SqlCommand(query, conn);
SqlDataReader dataReader = cmd.ExecuteReader();
while (dataReader.Read())
{
result.Add ( new FileInfo()
{
partNumber = dataReader["partNumber"].ToString(),
path = dataReader["fullPath"].ToString(),
fileType = dataReader["fileType"].ToString(),
baseID = dataReader["baseID"].ToString(),
});
}
return result;
}
它只是一个简单的查询,从 sql-server 数据库中检索文件名、路径和格式
解决方案
创建一个包含 700000 个对象的列表会占用大量内存并且速度相对较慢。我建议您不要返回列表,而是返回 IEnumerable,如下所示:
public static IEnumerable<FileInfo> ReturnFileFromDBInfo()
{
var result = new List<FileInfo>();
using (SqlConnection conn = new SqlConnection())
{
conn.ConnectionString = @"data source = MYPC\SQLEXPRESS; database = MYDB; integrated security = TRUE";
conn.Open();
var query = "SELECT a.partNumber, b.fullPath,a.fileType,a.baseID FROM drawings a ,bases_bases b WHERE a.baseID = b.id";
using (var cmd = new SqlCommand(query, conn))
using (SqlDataReader dataReader = cmd.ExecuteReader())
{
while (dataReader.Read())
{
yield return new FileInfo()
{
partNumber = dataReader["partNumber"].ToString(),
path = dataReader["fullPath"].ToString(),
fileType = dataReader["fileType"].ToString(),
baseID = dataReader["baseID"].ToString(),
};
}
}
}
}
这只会在您迭代 ReturnFileFromDBInfo 返回的结果时创建每个 FileInfo 对象:
foreach (var fileInfo in ReturnFileFromDBInfo())
{
string fileName = fileInfo.ToString();
// Create file etc.
}
推荐阅读
- python - 如何构建安装了 postgres 的 ubuntu docker 容器?
- java - onSavedInstanceState 不保存我的实例
- java - Spring Data JPA - 按集合中的字段名称查找
- sql - 用逗号格式化字符串
- python - 我如何在 python 中使用 docx 使这一段加粗
- javascript - Access-Control-Allow-Origin:所有用户只能访问一个站点
- arrays - 如何遍历包含角度相同类型数组的数组
- delphi - 使用循环更改对象属性(Delphi 2010)
- php - 使用谷歌语音将长音频转录为文本
- ubuntu-16.04 - 无法在 VmwareWorkstation 15 中使用 vmrun 运行 RunProgramInGuest