” Light ” Sdldotnet의 메모리 누수 문제를 수정했습니다.

[Windows] 당신의 PC를 새것처럼 만들어줄 소프트웨어

PC에 얕은 sdldotnet 저장 공간 누수 문제가 있는 경우 이 훌륭한 블로그 게시물이 실제로 시작하는 데 도움이 되기를 바랍니다.

sdldotnetcrust memory leak

개발 생성자 중 일부에 의해 발생하는 다소 불쾌한 메모리 유출을 발견한 것 같습니다. 특히,

On Surface(Bitmap bitmap) 및 sdl.net 소스를 감안할 때 오류는 surface(byte[] 및 Array) Surface(MemoryStream Stream)의 모든 곳에도 존재한다고 생각합니다.

코드는 구조 직후에 있으며 영원히 버블링에 의해 해제됩니다. SDL 소스의 비트맵에서 생성된 메모리 스트림이 확실히 출력되지 않아 실제 누수가 발생합니다.

pathToMyPreferrablyBigPNGFile 줄은 “blah.png”를 의미합니다.
안녕 (진짜)
비트맵은 놀라운 비트맵과 동일합니다. Bitmap(pathToMyPreferrallyBigPNGFile);
표면 표면 = 놀라운 이미지 표면(비트맵);
bitmap.Dispose();
Surface.Close();

다음 코딩(아래에서 관리되지 않는 SDL을 직접 정의함)이 이에 대한 증거이지만:

예를 들어 생성자에 대한 특정 사람 소스, 단일 메모리, 누수입니다.
공용 인터페이스(byte[] 배열)
공개 표면(System.Drawing.Bitmap-Bitmap)
인터페이스(공용 MemoryStream)
————————————————–

PC가 느리게 실행되나요?

PC가 끊임없이 당신에게 슬픔을 안겨주나요? 어디로 방향을 틀지 모르십니까? 글쎄, 우리는 당신을위한 솔루션을 가지고 있습니다! Reimage을 사용하면 일반적인 컴퓨터 오류를 복구하고 파일 손실, 맬웨어 및 하드웨어 오류로부터 자신을 보호할 수 있으며 최대 성능을 위해 PC를 최적화할 수 있습니다. 한 푼도 쓰지 않고 새 기계를 구입하는 것과 같습니다! 왜 기다려? 지금 Reimage을 다운로드하세요!

  • 1단계: Reimage 다운로드 및 설치
  • 2단계: 프로그램을 실행하고 화면의 지시를 따릅니다.
  • 3단계: 스캔할 파일 또는 폴더를 선택하고 "복원"을 클릭하십시오.

  • 아래 코드는 거의 모든 비트맵 표면을 로 이동시키는 해킹 방식으로 남아 있습니다. 누출의 원인으로 발전할 수 있는 것이 무엇인지 기억하십시오.

    sdldotnet 표면 기능 기억 누출

    SDL2로 두 번째 게임을 만들고 싶지만 From 코스 태그에 문제가 있는 축복을 받았습니다.놀라운 레이블을 만들 때마다 엄청난 메모리 저장 누수가 발생하고 텍스트가 잘못된 것인지 모르겠습니다!예를 들어, 매일 내 게임 주변에 FPS 태그가 표시될 때 이전 텍스처가 확실히 삭제되고 있기 때문에 메모리 유지 누수가 있다고 하고 싶습니다.다음은 Label 클래스의 번호입니다. 제가 틀린 부분을 알려주세요!

    네임스페이스 푸에데 {WidgetLabel 클래스: 공개 위젯공공의:    WidgetLabel(std::shared_ptr t_display, const Vector2i& t_position, const std::string& t_text, const int t_fontSize는 25와 같습니다. const Color& t_color = Color(255,255,255,255));    WidgetLabel& widgetlabel(const rhs)은 일반적으로 제거를 의미합니다.    WidgetLabel&buyers=(const WidgetLabel&rhs)=삭제;    ~위젯 레이블();    렌더링을 피하십시오();    업데이트 취소();    쓸모없는 setBlendMode(SDL_BlendMode t_blending);    setAlphaMode(Uint8 t_alpha)를 피하십시오.    실행 취소 setPosition(const Vector2i& t_positions);    재설정 setPositionX(const int t_x);    취소 setPositionY(const int t_y);    const Vector2i getPosition() const;    쓸모없는 setFontPath(const std::string& t_path);    빈 setText(const std::string& t_string);    const Vector2i getResolution() const;    간격 getWidth() 상수;    int getHeight() 상수;사적인:    std::shared_ptr<디스플레이> m_display;    ttf_font*m_font;    SDL_area *m_area;    SDL_texture *m_texture;   정수 m_width;    정수 m_height;    시간 m_positionX;    정수 m_positionY;    표준::문자열 m_text;    m_font_size; int 표준::문자열 m_fontPath;    염료 m_color;    void는 자신의 surface()를 생성합니다.;
    네임스페이스 se {WidgetLabel::WidgetLabel(std::shared_ptr<디스플레이> t_display, const Vector2i& t_position, const std::string& t_text, const int t_fontSize, const Color& t_color):m_디스플레이(t_디스플레이),m_표면(nullptr),m_texture(nullptr),m_폭(0),m_높이(0),m_positionX(t_position.getX()),m_positionY(t_position.getY()),m_text(t_text),m_fontSize(t_fontSize),m_fontPath("자산/글꼴/serif.ttf"),m_color(t_color)    M_font = TTF_OpenFont(m_fontPath.c_str(), t_fontSize);    (m_font == nullptr)        std::cerr << Dem "시장에서 SDL 글꼴을 로드하지 못했습니다! 오류: 크롤링 << TTF_GetError() 'n'; <<     int imgflags는 IMG_INIT_PNG를 의미합니다.    경우에 !(( IMG_Init(imgflags) & imgflags))        std::cerr << "SDL think about을 초기화할 수 없습니다" 'n'; <<     표면 성장();위젯라벨::~ 위젯라벨()    SDL_DestroyTexture(m_texture);    m_texture는 nullptr을 의미합니다.WidgetLabel::render() 취소    SDL_Rect rect_는 m_positionX, m_positionY, m_width, m_height와 같습니다.    SDL_RenderCopyEx(m_display->getRenderer(), m_texture, nullptr, &rect_, 0.0, nullptr, SDL_FLIP_NONE);위젯 레이블::setpossition(const 및 그 이후 vector2i t_positions) 실행 취소   m_positionX는 t_positions.getX()를 의미합니다.    m_positionY T_positions =.getY();무효 WidgetLabel::setPossitionX(const int t_x)    m_positionX는 t_x입니다.무효는 WidgetLabel::setPossitionY(const int t_y)입니다.    m_positionY는 t_y를 의미합니다.상수 Vector2i WidgetLabel::getPosition() 상수   Vector2i(m_positionX, m_positionY)를 반환합니다.무효 WidgetLabel::setFontPath(const std::string &t_path)    m_fontPath는 t_path와 같습니다.무효 WidgetLabel::setText(const std::string &t_string)    m_text는 t_string과 같습니다.    표면 생성();무효 WidgetLabel::createSurface(){   M_surface는 TTF_RenderText_Blended(m_font, m_text.c_str(), m_color)와 같습니다.    당신이 생각하지만 ( m_surface == nullptr )        std::cerr << "텍스트 평면을 표시할 수 없습니다! 오류: 인치 << << ttf_geterror() 'n';     다른 {        m_texture는 SDL_CreateTextureFromSurface(m_display->getRenderer(), m_surface)와 일치합니다.        만일을 대비하여 ( == m_texture nullptr )            std::cerr << "이동하는 동안 렌더 하트 텍스트에서 텍스처를 생성하는 것보다 적을 수 있습니다! 오류: 전체 . << SDL_GetError() << 'n';         독특한 {
    
    
    
    

    PC가 다시 충돌하지 않도록 하십시오. 지금 Reimage을 다운로드하세요!