쿼리에 약간의 성능 병목 현상이 있습니다. 무슨 일이 일어날 때마다 내 엔터티에서 바이트로 속성을 도입, EF 4.1 그것으로 작업하기 전에 그것을 캐스팅합니다. 주어진 코드를 설명합니다 : 위의 경우에, 그러나EF 4.1 SQL 압축 바이트
SELECT
....
FROM (SELECT
[Extent1].[Id] AS [Id],
...
[Extent1].[StateValue] AS [StateValue]
FROM [Segments] AS [Extent1]
WHERE ([Extent1].[FileId] = @p__linq__0) AND (0 = [Extent1].[StateValue])
) AS [Project1]
ORDER BY [Project1].[Index] ASC
:
var segmentQuery = workUnit.SegmentRepository.GetQuery()
.Where(x => x.FileId == file.Id)
.Where(x => x.StateValue == (byte)SegmentState.Unhandeled)
.OrderBy(x => x.Index);
은에 잘 변환 StateValue 실제로 내 요구를 위해 많이 방법을 정수 (4 개 가지 상태)이다, 바이트로 변경 할 때, 나는 얻을 :
SELECT ...
FROM (SELECT
[Extent1].[Id] AS [Id],
...
[Extent1].[StateValue] AS [StateValue]
FROM [Segments] AS [Extent1]
WHERE ([Extent1].[FileId] = @p__linq__0) AND (0 = (CAST([Extent1].[StateValue] AS int)))
) AS [Project1]
ORDER BY [Project1].[Index] ASC
이후 그 상태 필드에 (운이 좋게 필수적이지는 않지만) 효율적인 어느 날 그 공간을 행 더 후 100 000를 포함 할 수 있습니다이 표 그러나 1 바이트 만 차지하지만 바이트로 변경하면 쿼리가 죽습니다.
내가 잘못 했습니까? 내가 할 수 있는게 있습니까? 이 '문제'가 알려져 있습니까?
감사합니다.
** UPDATE **
[Flags]
public enum SegmentState : byte
{
Unhandeled,
Downloaded,
Invalid,
Assembled
}
내 기업에 대한
:/// <summary>
/// Dont use this, use SegmentState instead
/// </summary>
[Required]
public byte StateValue
{
get { return _stateValue; }
set { _stateValue = value; }
}
public SegmentState State
{
get { return (SegmentState)StateValue; }
set
{
if (State != value)
{
StateValue = (byte)value;
RaisePropertyChanged(StatePropertyName);
}
}
}
'StateValue 및 SegmentState' 유형을 게시 할 수 있습니까? 당신은 큰 데이터 볼륨을 처리하는 경우 SQL CE는 그들을 처리 할 수 있다고 생각하지 않습니다 – Eranga