したがって、DLのCRUDメソッドには、写真のブロブを戻す次のものがあります。
public static MemberPhoto RetrievePhoto(string customerID)
{
Database db = DatabaseFactory.CreateDatabase(Config.DbConnectionString);
using (DbCommand cmd = db.GetSqlStringCommand(string.Format(@" SELECT customerID,
p.Photo as PhotoBlob
FROM
SomeTable t
WHERE
t.PhotoID = (SELECT MAX(t.PhotoID) FROM SomeTable t
WHERE t.customerID = @{0}
GROUP BY t.CustomerID)", "customerID")))
{
try
{
db.AddInParameter(cmd, "@customerID", DbType.String, customerID);
using (IDataReader reader = db.ExecuteReader(cmd))
{
if (reader.Read())
{
Photo photo = new Photo();
photo.LoadFromDataReader(reader);
return photo;
}
}
}
これは、ManagementStudioから直接実行する場合よりも約10秒遅くなります。
SELECT customerID,
t.Photo as PhotoBlob
FROM
SomeTable t
WHERE
t.PhotoID = (SELECT MAX(t.PhotoID) FROM SomeTable t
WHERE t.customerID = '0000900595555'
GROUP BY t.CustomerID)
読者がブロブを読んでそれを戻すのに時間がかかるからなのか、それとも何なのかわかりません。それが問題である場合、これをどのようにスピードアップしますか?DBでその瞬間、私はそのクエリを実行し、それはミリ秒の結果タイミングです。
アップデート:
より詳しい情報; テーブルのフィールドタイプは、そのBLOBのSQLサーバーのタイプImageです。
また、LoadFromReaderにヒットした後でも、同じ時間だけ単体テストを実行しました。
[Test]
public void GetMemberPhoto_ByContractNumber_ReturnsAValidMemberPhoto()
{
// Arrange
const string customerID = "0044664176";
// Act
DTO.MemberPhoto memberPhoto = MemberPhotoCRUD.RetrieveMemberPhotoFromBlob(customerID);
//Assert
Assert.IsNotNull(memberPhoto);
Assert.IsTrue(memberPhoto.CustomerID > 0);
Assert.IsNotNull(memberPhoto.PhotoBinary.Length > 0);
}