AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Betriebssysteme Schreib-Cache für Dateisystem ausschalten

Schreib-Cache für Dateisystem ausschalten

Ein Thema von hoika · begonnen am 15. Aug 2007 · letzter Beitrag vom 16. Aug 2007
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#1

Schreib-Cache für Dateisystem ausschalten

  Alt 15. Aug 2007, 11:37
Hallo,

unter Win98 gab es unter Leistungsmerkmale die Möglichkeit,
den Schreibcache für das Dateisystem abzuschalten,
ich meine, nicht von der Platte selber.

Gibt es das auch unter XP.

Ich habe hier nen altes Pdx-Programm,
was Probleme im Netz bereitet.


Bitte keine Sprüche "Pdx ist out",
ist bekannt, der Kunde steigt demnächst um (*hoff*),
hat aber jetzt das Problem.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Schreib-Cache für Dateisystem ausschalten

  Alt 15. Aug 2007, 12:02
Hallo!

Lad dir mal die Testversion von Tune Up Utilities 2007 runter, da kann man das ein- und abschalten glaub ich. Bin jetzt nicht ganz sicher, aber ich meine, das dort schon mal gelesen zu haben.
Marc
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Schreib-Cache für Dateisystem ausschalten

  Alt 15. Aug 2007, 12:16
Hallo,

ja, das sind aber die Platten-Caches.
Von Netzwerk habe ich nichts gefunden.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Schreib-Cache für Dateisystem ausschalten

  Alt 16. Aug 2007, 08:18
Sorry, ich war mir da auch nicht mehr so sicher. Dachte nur ich hätte das da mal gesehen.
Marc
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Schreib-Cache für Dateisystem ausschalten

  Alt 16. Aug 2007, 08:58
Welcher Betriebssystem wird den auf dem File-Server eingesetzt? Könnt noch auf einen W2K Server aufgesetzt bzw. verwendet werden?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Schreib-Cache für Dateisystem ausschalten

  Alt 16. Aug 2007, 09:06
Hallo,

Server-Rechner ist w2k (Prof).
Oplocks sind dort schon gesetzt.

Nach dem Ersetzen von 2 Win98 Rechnern (neu XP Prof),
war plötzlich ein Indexfehler da.

bde share war allerdings auch noch False.


Unter Win9x konnte man unter Leistungsmerkmale den Schreibcache
des Dateisystems ausknipsen ("verzögertes Schreiben deaktivieren").
Win9x hatte auch ins Netz diesen Schreibcache an,
oder anders, mit gesetztem Schalter waren alle Probleme weg.

Nasja, ausser die üblichen bei Paradox

Ich habe die Befürchtung, dass es unter XP gar nicht mehr
auszuschalten geht .. ;(


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Schreib-Cache für Dateisystem ausschalten

  Alt 16. Aug 2007, 09:14
Folgende Unit habe ich vor Jahren mal aus torry.net heruntergeladen. Damit habe ich das Paradox-Netzwerk-Problem meist hinbekommen. auch unter WinNT / XP / 2000. Ich hatte allerdings das Problem mit der 16Bit-Version der BDE. Die 32-Bit-Version der BDE habe ich dann erst gar nicht mehr verwendet.


Gerd



Delphi-Quellcode:
unit DBCheckU;

{$ifdef Ver80} { Delphi 1.0x }
  {$define DelphiLessThan4}
{$endif}
{$ifdef Ver90} { Delphi 2.0x }
  {$define DelphiLessThan4}
{$endif}
{$ifdef Ver100} { Delphi 3.0x }
  {$define DelphiLessThan4}
{$endif}

interface

function CheckOKForParadoxAppToRun:boolean;

implementation

uses
{$ifdef Win32}
  Registry,
{$else}
  IniFiles,
{$endif}
  DbiProcs, DbiTypes, DbiErrs, DB, DBTables, Forms, SysUtils, Classes, Dialogs,
  Winprocs, WinTypes;

const
  RebootRequired: Boolean = False;

procedure CheckLocalShare;
var
  ASYSConfig: SYSConfig;
begin
{$ifdef Win32}
  { Ensure BDE is initialised }
  Session.Open;
{$endif}
  if (DbiGetSysConfig(ASYSConfig) = DbiErr_None) and
     not ASYSConfig.bLocalShare then
  begin
    ShowMessage('BDE''s LOCAL SHARE flag must be TRUE for this ' +
      'program to run. Ask your System Administrator to do this for ' +
      'you.'#13#13'This program will not continue until this change ' +
      'has been made and all BDE applications have been restarted');
  {$ifdef Win32}
    Application.ShowMainForm := False;
  {$endif}
    Application.Terminate;
  end
end;

{$ifdef Win32}
function RestartDialog(Wnd: HWnd; Reason: PChar; Flags: Integer): Integer; stdcall;
external 'shell32.dllindex 59;

type
  TVersionNo = record
    MS, LS: Cardinal;
  end;

function VersionNumber(const FileName: String): TVersionNo;
var
  VerInfo: Pointer;
  Len, BufSize: {$ifdef DelphiLessThan4}Integer{$else}Cardinal{$endif};
  Dest: PVSFixedFileInfo;
begin
  FillChar(Result, SizeOf(Result), 0);
  //How big is version info?
  BufSize := GetFileVersionInfoSize(PChar(FileName), Len);
  if BufSize > 0 then
  begin
    //Reserve sufficient memory
    GetMem(VerInfo, BufSize);
    try
      //Get version information
      if GetFileVersionInfo(PChar(FileName), 0, BufSize, VerInfo) then
        //Get translation table
        if VerQueryValue(VerInfo, '\', Pointer(Dest), Len) then
          with Dest^ do
          begin
            Result.MS := dwFileVersionMS;
            Result.LS := dwFileVersionLS
          end
    finally
      //Free sufficient memory
      FreeMem(VerInfo, BufSize)
    end
  end
end;

procedure CheckRedirector;

  procedure CheckFile(const FileName, Vn: String; Hi, Lo: Cardinal);
  var
    Ver: TVersionNo;
  const
    ErrorA = 'You need a newer system file. %s is version %d.%d.%d.';
    ErrorB = ' It should be version %s.'#13#13'Get an update to this file from ' +
             'http://support.microsoft.com/download/support/mslfiles/vrdrupd.exe';
    Error1 = ErrorA + ErrorB;
    Error2 = ErrorA + '%d.' + ErrorB;
  begin
    Ver := VersionNumber(FileName);
    if (Ver.MS < Hi) or ((Ver.MS = Hi) and (Ver.LS < Lo)) then
      //If the high word of the low DWord of the version info is 0,
      //the 0 is never written in MS version info strings
      if HiWord(Ver.LS) = 0 then
        ShowMessage(Format(Error1, [FileName, HiWord(Ver.MS),
          LoWord(Ver.MS), LoWord(Ver.LS), Vn]))
      else
        ShowMessage(Format(Error2, [FileName, HiWord(Ver.MS),
          LoWord(Ver.MS), HiWord(Ver.LS), LoWord(Ver.LS), Vn]))
  end;

var
  Dir: array[0..255] of Char;
begin
  GetSystemDirectory(Dir, SizeOf(Dir));
  CheckFile(String(Dir) + '\VREDIR.VXD', '4.0.1116', $40000, 1116);
  CheckFile(String(Dir) + '\VNETSUP.VXD', '4.0.1112', $40000, 1112);
end;

procedure CheckRegistryEntry(Reg: TRegistry;
  const Path, Value: String;
  const Default, Desired: Variant; Size: Byte);
var
  TmpInt: Cardinal;
begin
  with Reg do
    if OpenKey(Path, True) then
      try
        case VarType(Desired) of
          varInteger:
            { Some numbers need to be stored as DWORD values, }
            { while some need to be stored as binary values }
            if Size = 0 then
            begin
              if not ValueExists(Value) or
                 (ReadInteger(Value) = Default) then
              begin
                WriteInteger(Value, Desired);
                RebootRequired := True
              end
            end
            else
            begin
              TmpInt := Default;
              if ValueExists(Value) then
                ReadBinaryData(Value, TmpInt, Size);
              if TmpInt = Default then
              begin
                TmpInt := Desired;
                WriteBinaryData(Value, TmpInt, Size);
                RebootRequired := True
              end
            end;
          varString:
            begin
              if not ValueExists(Value) or
                 (ReadString(Value) = Default) then
              begin
                WriteString(Value, Desired);
                RebootRequired := True
              end
            end
        end
      finally
        CloseKey
      end
end;

const
  Control = 'System\CurrentControlSet\Control\';
  Services = 'System\CurrentControlSet\Services\';

procedure CheckWin95Registry;
var
  Reg: TRegistry;
const
  DOSRequester = 'Network\Novell\System Config\Netware Dos Requester';
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKey_Local_Machine;
    //Fix VREDIR.VxD settings
    CheckRegistryEntry(Reg, Services + 'VxD\VREDIR', 'DiscardCacheOnOpen', 0, 1, SizeOf(Byte));
    //Fix NWREDIR.VxD settings
    CheckRegistryEntry(Reg, Services + 'VxD\NWREDIR', 'ReadCaching', 1, 0, SizeOf(Byte));
    //Fix Novell settings
    CheckRegistryEntry(Reg, DOSRequester, 'Cache Writes', 'Yes', 'No', 0);
    CheckRegistryEntry(Reg, DOSRequester, 'Opportunistic Locking', 'Yes', 'No', 0);
    //Fix FileSystem troubleshooting settings
    CheckRegistryEntry(Reg, Control + 'FileSystem', 'DriveWriteBehind', $FFFFFFFF, 0, SizeOf(Longint));
    {$define AllOptionsThatPeopleSuggest}
    {$ifdef AllOptionsThatPeopleSuggest}
    CheckRegistryEntry(Reg, Control + 'FileSystem', 'SoftCompatMode', 1, 0, SizeOf(Longint));
    CheckRegistryEntry(Reg, Control + 'FileSystem', 'AsyncFileCommit', 0, 1, SizeOf(Byte));
    {$endif}
  finally
    Reg.Free
  end
end;

procedure CheckWinNTRegistry;
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKey_Local_Machine;
    //Disable opportunistic locking & caching
    CheckRegistryEntry(Reg, Services + 'LanmanServer\Parameters', 'EnableOpLocks', 1, 0, 0);
    CheckRegistryEntry(Reg, Services + 'LanmanServer\Parameters', 'CachedOpenLimit', 1, 0, 0);
    CheckRegistryEntry(Reg, Services + 'LanmanWorkStation\Parameters', 'UseOpportunisticLocking', 1, 0, 0);
    CheckRegistryEntry(Reg, Services + 'LanmanWorkStation\Parameters', 'UtilizeNtCaching', 1, 0, 0);
    //Make sure NetWare popups are enabled to avoid a documented issue
    CheckRegistryEntry(Reg, Services + 'NWCWorkstation\Parameters', 'DisablePopup', 1, 0, 0);
  finally
    Reg.Free
  end
end;
{$else}
procedure CheckWin31Registry;
begin
  with TIniFile.Create('System.Ini') do
    try
      if ReadString('386Enh', 'ForceLazyOff', '') = 'then
      begin
        { You need to put appropriate value for data drive letters!!! }
        WriteString('386Enh', 'ForceLazyOff', 'CDE');
        RebootRequired := True
      end
    finally
      Free
    end
end;
{$endif}

function CheckRegistryIsAcceptable:boolean;
begin
CheckRegistryIsAcceptable:=true;
{$ifdef Win32}
  case Win32Platform of
    VER_PLATFORM_WIN32_WINDOWS: CheckWin95Registry;
    VER_PLATFORM_WIN32_NT: CheckWinNTRegistry;
  end;
  if RebootRequired then
    //Use standard Win32 reboot dialog
    begin
     CheckRegistryIsAcceptable:=false;
     RestartDialog(0, nil, ew_RestartWindows)

    end;
{$else}
  CheckWin31Registry;
  if RebootRequired then
  begin
    ShowMessage('Es wurden Änderungen an der Registry drchgeführt. Bitte starten Sie Windows neu.');
    CheckRegistryIsAcceptable:=false;
    ExitWindows(ew_RestartWindows, 0)
  end
{$endif}
end;

function CheckOKForParadoxAppToRun:boolean;
begin
  {$ifdef Win32}
  //Only Win95 redirector files need checking
  if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
    CheckRedirector;
  {$endif}
 CheckOKForParadoxAppToRun:=CheckRegistryIsAcceptable;
{  CheckLocalShare;}
end;

end.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Schreib-Cache für Dateisystem ausschalten

  Alt 16. Aug 2007, 10:13
Hallo,

hm,

das wären ja stellenweise doch Änderungen am Client,
so langsam erinnere ich mich ...

Mal hinschicken.

Danke


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Schreib-Cache für Dateisystem ausschalten

  Alt 16. Aug 2007, 10:49
Zitat von hoika:
das wären ja stellenweise doch Änderungen am Client,
so langsam erinnere ich mich ...
Ja. Muss an jedem Client und am Server mal aufgerufen werden.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz