CSharp OwnCode Out of memory.

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
В ZennoBox выскакивает ошибка, как только начинает выполняться C# код разгадывания каптчи:
Код:
//Отправка капчи из картинки
var captcha__get = project.Variables["CAPTCHA_image"].Value;
var image = System.Drawing.Image.FromFile(@captcha__get);
string base64String = String.Empty;
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
  image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
  byte[] imageBytes = ms.ToArray();
  base64String = Convert.ToBase64String(imageBytes);
}
var result = ZennoPoster.CaptchaRecognition("Anti-Captcha.dll", base64String, "");
// отрезаем лишнее
var tmp = result.Split(new [] {"-|-"}, StringSplitOptions.None);
if (tmp.Length > 1) return tmp[0];
return result;
В чем проблема?
В момент выполнения свободно ещё 1гб оперативной памяти.
Windows Server 2012 x64
 
Последнее редактирование:

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
var captcha__get = project.Variables["get_cap"].Value;
using (var image = System.Drawing.Image.FromFile(@captcha__get))
{
string base64String = String.Empty;
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
byte[] imageBytes = ms.ToArray();
base64String = Convert.ToBase64String(imageBytes);
}
}
var result = ZennoPoster.CaptchaRecognition("RuCaptcha.dll", base64String, "");
// отрезаем лишнее
var tmp = result.Split(new[] { "-|-" }, StringSplitOptions.None);
if (tmp.Length > 1) return tmp[0];
return result;

Можно попробовать обернуть в юзинг
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Забыл отписаться в теме: проблема была в битом изображении. Сейчас все ок.
 
  • Спасибо
Реакции: Blazelip

Blazelip

Client
Регистрация
01.05.2016
Сообщения
99
Благодарностей
5
Баллы
8
Забыл отписаться в теме: проблема была в битом изображении. Сейчас все ок.
Не подскажете, как решить проблему с битыми изображениями? Тоже примерно раз в 7 капч качается битая картинка
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Не подскажете, как решить проблему с битыми изображениями? Тоже примерно раз в 7 капч качается битая картинка
Код обернуть в try {} catch {}.
C#:
try {
    //Отправка капчи из картинки
    var captcha__get = project.Variables["CAPTCHA_image"].Value;
    var image = System.Drawing.Image.FromFile(@captcha__get);

    string base64String = String.Empty;
    using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
    {
      image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
      byte[] imageBytes = ms.ToArray();
      base64String = Convert.ToBase64String(imageBytes);
    }
    var result = ZennoPoster.CaptchaRecognition("Anti-Captcha.dll", base64String, "");
    // отрезаем лишнее
    var tmp = result.Split(new [] {"-|-"}, StringSplitOptions.None);
    if (tmp.Length > 1) return tmp[0];
    return result;
} catch (Exception e) {
    //return e.Message;
    return null;
}
Если произойдет ошибка, то работа продолжится по красной ветке - её необходимо протянуть на действие "скачать новую каптчу".
Если хотите получить название ошибки и продолжить работу по зелёной ветке - закомментируйте return null; и расскомментируйте строку выше.
 
  • Спасибо
Реакции: dimafatality и Blazelip

Blazelip

Client
Регистрация
01.05.2016
Сообщения
99
Благодарностей
5
Баллы
8
Код обернуть в try {} catch {}.
C#:
try {
    //Отправка капчи из картинки
    var captcha__get = project.Variables["CAPTCHA_image"].Value;
    var image = System.Drawing.Image.FromFile(@captcha__get);

    string base64String = String.Empty;
    using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
    {
      image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
      byte[] imageBytes = ms.ToArray();
      base64String = Convert.ToBase64String(imageBytes);
    }
    var result = ZennoPoster.CaptchaRecognition("Anti-Captcha.dll", base64String, "");
    // отрезаем лишнее
    var tmp = result.Split(new [] {"-|-"}, StringSplitOptions.None);
    if (tmp.Length > 1) return tmp[0];
    return result;
} catch (Exception e) {
    //return e.Message;
    return null;
}
Если произойдет ошибка, то работа продолжится по красной ветке - её необходимо протянуть на действие "скачать новую каптчу".
Если хотите получить название ошибки и продолжить работу по зелёной ветке - закомментируйте return null; и расскомментируйте строку выше.

Иными словами, если произойдет ошибка, то по красной ветке от кубика выходим на повторный ГЕТ-запрос к картинке, т.е. пробуем заново скачать, верно?
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Иными словами, если произойдет ошибка, то по красной ветке от кубика выходим на повторный ГЕТ-запрос к картинке, т.е. пробуем заново скачать, верно?
Да, всё верно.
Но лучше, конечно, ограничить кол-во таких итераций, а то так может и в бесконечный цикл войти.
 
  • Спасибо
Реакции: Blazelip

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)