SSE Incorrect length read

Dieses Thema im Forum "[Skyrim] Technik" wurde erstellt von Kleiner Prinz, 27. März 2021.

  1. Kleiner Prinz

    Kleiner Prinz Ratsmitglied

    Ich kämpfe immer noch mit dem "Incorrect length read" Problem.
    Da ich mittlerweile eine Unmenge an esp, esl, esm Mods im Plugin-Verzeichnis habe, kann ich zwar mein Spiel speichern, aber das neu gespeicherte Savegame nicht laden, und lande per CTD auf dem Desktop.

    Gelesen habe ich dazu:

    Zitat:
    "Standardmäßig können bis zu 512 Dateien gleichzeitig auf Stream-E / A-Ebene geöffnet sein" !

    Es soll dazu aber eine Lösung geben !

    So heißt es auch:
    Zitat:
    Das Limit von 512 geöffneten Dateien auf Stream-E / A-Ebene kann mithilfe der Funktion "_setmaxstdio" auf maximal 8.192 erhöht werden.

    Quelle des Zitat:
    https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/setmaxstdio?view=msvc-160

    Und:

    Zitat:
    Die maximale Anzahl von Dateihandles, die die C stdio-Ebene standardmäßig offen halten kann, beträgt 512.
    Da SSE ein offenes Dateihandle für alle Ihre Plugins (einschließlich solcher, die nicht Teil Ihrer Ladereihenfolge sind) sowie einige andere wichtige Dateien beibehält.
    Es ist möglich, diese Grenze bei einer Schwerlastreihenfolge zu erreichen.
    Sobald Sie das Limit erreicht haben, schlagen alle Aufrufe von fopen_s fehl, was bedeutet, dass das Spiel keine neuen Dateien mehr lesen kann.
    Dies führt unter anderem dazu, dass gespeicherte Spielelasten als beschädigt gemeldet werden, da das Spiel die gespeicherten Spieledateien nicht mehr lesen kann.
    Dies ist ein Fehler, der als "falsche Speicherbeschädigung" bezeichnet wird.
    Der Patch/Fix erhöht das Limit auf das Systemmaximum (2048), das für 99,9% der Anwendungsfälle mehr als ausreichend sein sollte.
    Um es auf andere Weise zu lösen, müssten wichtige Teile der Datei-E / A von SSE neu geschrieben werden.

    Quelle:
    https://www.reddit.com/r/skyrimmods/comments/8muxmd/sse_engine_fixes_now_with_fix_for_false_save/

    Leider finde ich dazu keinen Hinweis, in welcher ("ini"?) Datei man den Befehl "_setmaxstdio" findet, um den Wert zu erhöhen.

    Leider kann "SSE Engine Fixes" dieses Problem nicht lösen, obwohl es heißt: "SSE Engine Fixes now updated with a fix for the false save corruption bug that appears after using many plugins".
    Der Patch/Fix erhöht das Limit auf das Systemmaximum (2048), das für 99,9% der Anwendungsfälle mehr als ausreichend sein sollte.
    Leider finde ich in der "ini" (bzw. jetzt ja "toml") kein "_setmaxstdio" , um den Wert weiter zu erhöhen. :(

    # Engine Fixes for Skyrim Special Edition

    [EngineFixes]
    VerboseLogging = false # Add extra log messages
    CleanSKSECosaves = false # Delete SKSE cosaves that have no matching save

    [Patches]
    DisableChargenPrecache = false # "Precache Killer", same patch that is already in RaceMenu
    EnableAchievementsWithMods = true # Enables achievements with mods active
    FormCaching = true # Attempts to speed up the global form table by caching recently used forms (SSE Fixes)
    MaxStdio = true # Sets the maximum number of open file handles to 2048 (default 512), preventing the game from running out with large plugin counts (fixes false save corruption)
    MemoryManager = true # Replaces Skyrim's global allocator
    RegularQuicksaves = false # Makes quick saves into regular saves
    SafeExit = true # Prevent the game from hanging while shutting down
    SaveAddedSoundCategories = true # Save sound categories added by mods
    ScaleformAllocator = true # Replaces the scaleform allocator
    ScrollingDoesntSwitchPOV = false # Disables swapping between 1st/3rd person when using scroll to zoom, making it require manual swapping
    SleepWaitTime = false # Modifies how long it takes an hour to pass when sleeping/waiting.
    SleepWaitTimeModifier = 0.3 # 1.0 = default, smaller = faster, larger = slower
    TreeLODReferenceCaching = true # Speeds up the slow Tree LOD function. Requires FormCaching to be active. (SSE Fixes)
    WaterflowAnimation = true # Decouple water flow animation speed from in-game timescale and use our setting instead
    WaterflowSpeed = 20.0 # 20.0 = default, smaller = slower, larger = faster

    [Fixes]
    ArcheryDownwardAiming = true # Fix a bug where arrows don't fire properly if you're aiming downward while crouching on a ridge
    AnimationLoadSignedCrash = true # Fix a misplaced use of a signed value. Should allow to load more animations before CTD
    BethesdaNetCrash = true # Fix the game crashing on startup if you live in a city or country with special characters in the name
    BSLightingAmbientSpecular = true # Fix bug where lighting template Directional Ambient Specular & Fresnel Power are sent to BSLighting shader incorrectly
    BSLightingShaderForceAlphaTest = true # Forces alpha test flag on when NiAlphaProperty/AlphaTest true. Fixes object LOD reflections.
    BSLightingShaderParallaxBug = true # Fixes a bug causing the parallax technique to break if specular is not also set
    BSTempEffectNiRTTI = true # Fixes a bug where the NiRTTI for this object is not set properly
    CalendarSkipping = true # Fix a bug where the game calendar effectively skips a year if you fast travel too far between 20:00 and 23:99 in-game
    CellInit = true # Fixes a rare crash where a form does not get converted from an id to a pointer
    ConjurationEnchantAbsorbs = true # Fix bug where spell absorption triggers on enchanted items using conjuration summons
    CreateArmorNodeNullptrCrash = true # Fix typo that may cause a crash somewhere in CreateArmorNode
    DoublePerkApply = true # Fix NPC perks applying twice when you load a game
    EquipShoutEventSpam = true # Fix a bug where the "equip shout" procedure will send a "shout equipped" event even if the shout fails to equip
    GetKeywordItemCount = true # Fix the condition function "GetKeywordItemCount", which returns broken results in numerous cases
    GHeapLeakDetectionCrash = true # Fix a crash where scaleform attempts to report a memory leak but the code doesnt exist in Skyrim's build
    GlobalTime = true # Fixes game systems that are affected by game time instead of real time
    LipSync = true # Fix a bug causing lip sync to desync. Same as LE bug fix.
    MemoryAccessErrors = true # Fix a handful of out-of-bounds or use-after-free bugs. Required for experimental memory patches.
    MO5STypo = true # Fix a typo preventing the game from loading MO5S (1st person female alternate texture set) entries in ARMA forms
    NullProcessCrash = true # Fix a couple cases where the game can crash when checking the equipped weapons of an actor without an AI process
    PerkFragmentIsRunning = true # Fix crash if the IsRunning function of a Perk Fragment is called on a non-Actor form
    RemovedSpellBook = true # Fix a crash where learning a spell from a book that is later removed in another plugin causes a crash in inventory
    SaveScreenshots = true # Fix black save screenshots when TAA is disabled
    SlowTimeCameraMovement = true # Fix camera movement sensitivity during slow time
    TorchLandscape = true # Fix a bug where torches sometimes don't light the landscape
    TreeReflections = true # Fix tree LOD reflection alpha. ENB contains this fix, but there is no conflict.
    VerticalLookSensitivity = true # Make vertical look sensitivity not tied to framerate
    WeaponBlockScaling = true # Fix weapon blocking so it correctly scales off of the blocking actor's weapon

    [Warnings]
    DupeAddonNodes = false # Warns if there are two or more addon nodes (ADDN) with the same node index in your load order
    RefHandleLimit = true # Warns when you are close to the reference handle limit at main menu and after loading a save
    RefrMainMenuLimit = 800000 # Handle count to warn at on main menu
    RefrLoadedGameLimit = 1000000 # Handle count to warn at after loading a save game

    [Experimental]
    SaveGameMaxSize = false # Expands the maximum uncompressed size of a save game from 64 MB to 128 MB# can fix "crash on save" issue in long-runnning saves

    # DO NOT USE THIS IT IS FOR SPECIFIC TESTING ONLY
    TreatAllModsAsMasters = false # Loads all mods as if they are masters.

    Wer kennt sich aus, und kann mir sagen, in welcher ("ini"?) Datei man den Befehl "_setmaxstdio" findet ?
     
    Zuletzt bearbeitet: 27. März 2021
  2. Werbung (Nur für Gäste)
  3. Den Wert findest du in der Enginefixes.dll So wie ich das sehe ist der Aufruf eine C++ Runtime Variable die man selten in Ini Dateien findet..
    Die neuen Engine fixes sind auch zweiteilig und erfordern (die alten evtl. auch, ich habe kein SkyrimSE) noch die AdressLibrary die man hier findet
    https://www.nexusmods.com/skyrimspecialedition/mods/32444
     
    Kleiner Prinz gefällt das.
  4. PRieST

    PRieST Bürger

    Engine fixes hat das Limit im Code fixed auf 2048 erhöht. Es gibt dazu (bisher) keine Möglichkeit, diesen Wert manuell/per ini weiter zu erhöhen. Dazu müsste man sich den Quellcode von github schnappen, die entsprechende codezeile editieren und dann die DLL neu compilieren.
    Eventuell kommt aber mit einer Version eine weitere Erhöhung des Wertes bzw. er lässt sich dann per ini/toml editieren. Bis dahin ist mit engine fixes nichts weiter zu machen.
     
    Kleiner Prinz gefällt das.
  5. Kleiner Prinz

    Kleiner Prinz Ratsmitglied

    Die "Address Library for SKSE Plugins" sind bereits installiert, da sie von "Enginefixes" benötigt werden, (Requirements).

    Dass der Wert (2048) in der "Enginefixes.dll" eingetragen ist, ist mir schon klar.
    Nur hätte es ja sein können, dass die "dll" per "ini/toml" eine Änderung zulässt.
    Dort ist aber leider nur [Patches] "MaxStdio=True/false" möglich.

    So müsste man also die "Enginefixes.dll" editieren können.
    Per Editor ist dies unmöglich, und hatte ich bereits versucht.
    Laut Internet soll es mit "EclipseLink" möglich sein, aber damit komme ich nicht klar.

    Wenn ich wüsste, wie, würde ich dies machen.
    Compiler finde ich dazu bei dem oben genannten "EclipseLink" !
    https://www.eclipse.org/eclipselink/downloads/
    Leider kenne ich mich damit zu wenig aus.

    Jedenfalls scheint dies der einzige Weg zu sein, um das Problem mit den Savegames zu lösen.
     
  6. PRieST

    PRieST Bürger

    Wie genau, weiß ich nun auch nicht, aber das hier: Klick mich
    behandelt genau das Thema und liest sich so, dass es wirklich mit der nächsten Version von Engine Fixes implementiert wird. Dabei wird das Limit nicht direkt auf 8196 angehoben, sondern ist frei konfigurierbar.

    Noch ein weiterer Link auf der GitHub-Seite: https://github.com/aers/EngineFixesSkyrim64/issues/24

    Leider steht auf deren Seite nicht, was genau man braucht, um die .dll selbst zu compilieren, da müsste man sich dann wohl etwas tiefer mit der Materie auseinandersetzen. Also für den Fall, dass du es halt vorher selbst versuchen möchtest, bevor es den "offiziellen Weg" findet.
     
    Kleiner Prinz gefällt das.
  7. Kleiner Prinz

    Kleiner Prinz Ratsmitglied

    Das wäre ja super ! :)

    Ich habe nun aber eine andere Lösung gefunden, ...hoffe ich jedenfalls ! :):):)

    In der alten EngineFixes steht in der EngineFixes.ini noch folgendes:

    [Experimental]
    MemoryManager = false ; Disables Skyrim's memory manager in favor of standard allocation (Use OS Allocators), can help with ILS
    UseTBBMalloc = false ; Uses TBBMalloc instead of standard allocators, only active if MemoryManager is true
    SaveGameMaxSize = false ; Expands the maximum uncompressed size of a save game from 64 MB to 128 MB; can fix "crash on save" issue in long-runnning saves

    Dort hatte ich es mal auf "true" gestellt, und es hatte nichts bewirkt. :(
    Darum hatte ich in der EngineFixes.toml, der aktuellen EngineFixes nichts mehr geändert.
    Dort findet man jetzt auch nur noch den Eintrag:

    [Experimental]
    SaveGameMaxSize = false # Expands the maximum uncompressed size of a save game from 64 MB to 128 MB# can fix "crash on save" issue in long-runnning saves

    Jedenfalls bin ich jetzt doch noch mal hin, und habe diesen auf "true" gestellt.
    Und zu meiner Freude, funktioniert das Laden von neuen Savegame wieder. :):):)

    Ich hoffe, dass es auch dabei bleibt, sonst müsste ich mich doch mal mit dem Compilieren der "dll" auseinandersetzen.
    Warum das jetzt plötzlich mit der neuen Version funktioniert, wenn man es auf "true" stellt, ist mir ein Rätsel, wenn die gleiche Änderung in der alten Version von EngineFixes nichts bewirkte. o_O:confused::)

    Bis dahin also erst mal "Vielen Dank" ! :)
     
  8. Werbung (Nur für Gäste)
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden