Мне нужно прочитать двоичный образ из базы данных и сохранить этот двоичный образ как образ Tiff в файловой системе.Я использовал следующий код
private static bool SavePatientChartImageFileStream(byte[] ImageBytes, string ImageFilePath, string IMAGE_NAME)
{
bool success = false;
try
{
using (FileStream str = new FileStream(Path.Combine(ImageFilePath, IMAGE_NAME), FileMode.Create))
{
str.Write(ImageBytes, 0, Convert.ToInt32(ImageBytes.Length));
success = true;
}
}
catch (Exception ex)
{
success = false;
}
return success;
}
Поскольку эти двоичные файлы изображений передаются посредством репликации слиянием, иногда случается, что двоичный файл изображения передается не полностью, и мы отправляем запрос на выборку двоичного изображения с подсказкой nolock.Это возвращает в ImageBytes, имеющем 1-байтовые данные, и сохраняет его как испорченное изображение размером 0 КБ.
Я изменил приведенный выше код на: -
private static bool SavePatientChartImage(byte[] ImageBytes, string ImageFilePath, string IMAGE_NAME)
{
bool success = false;
System.Drawing.Image newImage;
try
{
using (MemoryStream stream = new MemoryStream(ImageBytes))
{
using (newImage = System.Drawing.Image.FromStream(stream))
{
newImage.Save(Path.Combine(ImageFilePath, IMAGE_NAME));
success = true;
}
}
}
catch (Exception ex)
{
success = false;
}
return success;
}
В этом случае, если ImageBytes1 байт или неполный, он не сохранит изображение и вернет успех как ложное.
Я не могу удалить NOLOCK, так как у нас экстремальная блокировка.
Второй код медленнее по сравнению спервый.Я пробовал на 500 изображений.разница составляла 5 секунд.
Я не мог понять разницу между этими двумя частями кода и тем, какой код использовать, когда.Пожалуйста, помогите мне понять.