Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ist();_C#_Performance_Linq_Foreach_Anonymous Types - Fatal编程技术网

C# ist();

C# ist();,c#,performance,linq,foreach,anonymous-types,C#,Performance,Linq,Foreach,Anonymous Types,我认为您的查询太复杂(连接太多),特别是考虑到有一些甚至没有使用 请注意,如果查询很复杂,一些LINQ提供程序(如LINQtoEntities)可能需要相当长的时间来简单地处理查询树以将其转换为SQL。(我已经有一些查询需要10或15秒才能让EF进行分析。) 如我所怀疑的,如果您正在使用的LINQ实现正在访问一个数据库,那么请使用SQL分析工具来检查传递给服务器的实际SQL以及该SQL的性能 另外,请注意,给定您正在使用的字段,您实际上可以通过将结果直接具体化到BoAsset对象中来取消fore

我认为您的查询太复杂(连接太多),特别是考虑到有一些甚至没有使用

请注意,如果查询很复杂,一些LINQ提供程序(如LINQtoEntities)可能需要相当长的时间来简单地处理查询树以将其转换为SQL。(我已经有一些查询需要10或15秒才能让EF进行分析。)

如我所怀疑的,如果您正在使用的LINQ实现正在访问一个数据库,那么请使用SQL分析工具来检查传递给服务器的实际SQL以及该SQL的性能

另外,请注意,给定您正在使用的字段,您实际上可以通过将结果直接具体化到
BoAsset
对象中来取消
foreach
循环

即:

var result = from q in query
             select new BoAsset
             {
                 AssetId = q.a.AssetID,
                 AssetCustomerId = q.a.AssetCustomerID,
                 StockImage = q.a.StockImage,
                 Description = q.a.Description,
                 DetailedDescription = q.a.DetailedDescription,
                 Author = q.a.Author,
                 FileName = q.Af1.FileName, //was 1
                 FileExtension = q.Af1.FileExtension, //was 1
                 AssetCreateDate = q.a.AssetCreateDate,
                 AssetExpireDate = q.a.AssetExpireDate,
                 AssetActivateDate = q.a.AssetActivateDate,
                 Notes = q.a.Notes,
                 Keywords = q.a.Keywords,
                 Photographer = q.a.Photographer,
                 PhotographerEmail = q.a.PhotographerEmail
             };

List<BoAsset> assetList = result.ToList();
var result=来自查询中的q
选择新船集
{
阿塞蒂德=q.a.阿塞蒂德,
AssetCustomerId=q.a.AssetCustomerId,
StockImage=q.a.StockImage,
描述=q.a.描述,
详细描述=q.a.详细描述,
作者,
FileName=q.Af1.FileName,//为1
FileExtension=q.Af1.FileExtension,//为1
AssetCreateDate=q.a.AssetCreateDate,
AssetExpireDate=q.a.AssetExpireDate,
AssetActivateDate=q.a.AssetActivateDate,
注释=q.a.注释,
关键词=q.a.关键词,
摄影师,
拍照留念
};
List assetList=result.ToList();

你到底在哪里使用匿名类型?哪部分是匿名类型?你一定要发布动态对象“结果”为o。浏览155个项目并不是那么多工作,除非在循环中执行了昂贵的操作,而你没有显示这些操作。什么是
结果
?这是一个疑问吗?这可能是您在执行该查询时花费的时间,无论是在前面还是在迭代时,这取决于查询的编写方式及其作用。如果
result
IEnumerable
,它可能是缓慢的底层源。您到底在哪里使用匿名类型?哪部分是匿名类型?您必须明确地发布动态对象“结果”为o。浏览155项实际上并不是那么多工作,除非在循环中执行了昂贵的操作,而您没有显示这些操作。什么是
结果
?这是一个疑问吗?这可能是您的时间被该查询的执行所消耗,无论是在前面还是在您迭代时,这取决于查询的编写方式和功能。如果
result
是一个
IEnumerable
,则可能是底层源速度较慢。.我在foreach循环的开头设置了一个断点。。。运行循环需要20秒。你真的需要告诉我们结果如何defined@user1541559:定义结果时不读取结果,在循环中使用结果时读取结果,这意味着读取结果的时间包含在20秒内。您可以先对结果使用
ToList
将其读入列表,然后在循环中使用列表,您将看到20秒实际上是用来读取结果的。。。运行循环需要20秒。你真的需要告诉我们结果如何defined@user1541559:定义结果时不读取结果,在循环中使用结果时读取结果,这意味着读取结果的时间包含在20秒内。您可以先对结果使用
ToList
将其读入列表,然后在循环中使用列表,您将看到20秒实际上是用来读取结果的。
var result = from q in query
             select new BoAsset
             {
                 AssetId = q.a.AssetID,
                 AssetCustomerId = q.a.AssetCustomerID,
                 StockImage = q.a.StockImage,
                 Description = q.a.Description,
                 DetailedDescription = q.a.DetailedDescription,
                 Author = q.a.Author,
                 FileName = q.Af1.FileName, //was 1
                 FileExtension = q.Af1.FileExtension, //was 1
                 AssetCreateDate = q.a.AssetCreateDate,
                 AssetExpireDate = q.a.AssetExpireDate,
                 AssetActivateDate = q.a.AssetActivateDate,
                 Notes = q.a.Notes,
                 Keywords = q.a.Keywords,
                 Photographer = q.a.Photographer,
                 PhotographerEmail = q.a.PhotographerEmail
             };

List<BoAsset> assetList = result.ToList();