請問類似Nero裡的檔案讀取Buffer要怎麼做呢? |
|
martialart
一般會員 發表:6 回覆:6 積分:7 註冊:2002-06-15 發送簡訊給我 |
||
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
試試 RAMDisk程式 有異曲同功之效
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=19236
不過Nero的技術應該是使用於暫存檔之方式 因為一但程式中止之後即釋放而RAMDisk程式 一但儲存之後可以再利用但是實體RAM空間必須夠大好處是夠快
你可以先試此試用版它是用VB寫的 滿好用的當win98的dos啟動之後程式就啟動了
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
引言: 試試 RAMDisk程式 有異曲同功之效 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=19236 不過Nero的技術應該是使用於暫存檔之方式 因為一但程式中止之後即釋放而RAMDisk程式 一但儲存之後可以再利用但是實體RAM空間必須夠大好處是夠快 你可以先試此試用版它是用VB寫的 滿好用的當win98的dos啟動之後程式就啟動了就您的瞭解RAMdisk的原理可否介紹給大家瞭解,實作上有何困難點?
|
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
axsoft 版主的回應 真正是讓我思考許久 先行說明討論區之用意在我個人看來討論區的功能除了 知與解惑 當然也需有另類思考 (是否與理論有沖突有時也需時間來定義)
以下個人所知但不代表完全正確 還需axsoft 版主精譬解說
1 RAMdisk的原理 簡單來說就是將記憶體的區塊分割模擬硬碟 假設256MB的記憶體分割出100MB給特定的某軟體加速使用
(實例)
1 win98se開機片 (常常看到卻很少人注意)
2 win2000開機片
3 Linux應用於嵌入式系統
當Linux的核心啟動之後 除了精減後的開機模組(約於400k) 此時核心因為已
載入記載體開始shell啟用RAMdisk將處理硬體偵測與其他模組的啟用以及相關
動態連接檔 Linux上嵌入式系統目前一共可以使用3次的壓縮技術 這也是一些
硬體商使用Linux上嵌入式系統卻只有記憶體但是卻無disk
4 顯示卡的RAM 現在的顯示卡為何可以擁有64MB 其實它的原理應該由640k第一
層 然後一層一層堆疊上去有點像蓋大型一般
(天馬行空討論1)
martialart發問者:希望
1 可以自行設定使用任意大小的記憶體空間來當檔案讀取的Buffer,
2 其中先將檔案讀到Buffer裡,當程式要處理檔案時,
3 直接從記憶體裡的Buffer讀取
--------------------------------------------------------------------
不就符合RAMdisk(我猜測的) Buffer其實與RAMdisk不同光名字就不同^-^
--------------------------------------------------------------------
(困難點討論)
1 在dos下有640k的限制 那為何win98se開機片能模擬a:
我想請axsoft 版主再為我們解說吧(因為我知的也有限)
2 以win98se系統由dos7.0開機之後 會shell載入保護模式此時的硬體設備也將
載入而原來的記憶體已在dos下 分割部份已經變成disk (不是記憶體)
(天馬行空討論2)
1 RAMdisk本身並無法儲存 所以也應用檔案回存方式回寫於硬碟(這又有點像虛
擬光碟了)
2 運用於大量資料存取時 搭配磁碟陣列運用於資料庫
A將記憶體製成類似PCI插巢讓使用者可一次大量擴充記憶體
B由於將實體整個資料載入記憶體 變成一個記載體系統與共享的系統
win2000下的c:\pagefile.sys是硬碟模擬記憶體(剛剛好又相反)
我想我只知道這些
沒時間了 我要外出等axsoft 版主的回應解說
先說明我寫的只是我個人知道對與錯希望axsoft 版主不吝告知 謝謝
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
|
martialart
一般會員 發表:6 回覆:6 積分:7 註冊:2002-06-15 發送簡訊給我 |
我當初會問這個問題是因為在工作中碰到的一個狀況....
公司的有一個電腦應用系統,其中有一部份是用來將檔案以磁帶備份的程式。
因為磁帶寫入的速度為 16MB/sec,而且如果讀取的資料來不及讓磁帶在捲動中寫入,則磁帶必須倒帶到中斷的地方繼續寫入。而如此的機械動作會耗費很多的時間,情形就像是燒光碟時發生Buffer under run的意思差不多。所以該程式用一個像Nero一樣的緩衝區的方式,預防這種狀況。 因此我在想,如果是我的話,這樣的功能要如何實做出來?因為功力太差,所以只好在這裡問各位高手.... 這種緩衝區有一些的條件,大小可以自行設定,用完之後歸還memory...
我還想到一個問題,當碰到一個檔案的FileSize大於BufferSize,此時勢必將檔案分段載入Buffer,而這樣的程式又該如何寫? 謝謝各位高手的指教...
|
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
轉貼BufferSize
http://www.na.ntu.edu.tw/chinese/course/online/cplus/example/cplus/chap7/example/
第 七 章 檔案輸出輸入 7 - 1 兩種檔案模式 C++ 語言本身並沒有提供輸出輸入的敘述,所有輸出輸入的工作均依賴函數庫所提供的輸出輸入函數,要使用 C++ 輸出輸入函數必需了解輸出入檔案的特性、輸出入的方法(I/O Method) 與輸出入函數的層次(Level of I/O)。 檔案可分為兩種模式: (1)文字模式檔(Text Mode) (2)二進位模式檔(Binary Mode) (a)對新行(New Line)即 "\n" 的轉換不同 Text:"\n"---> ASCII 10--->輸出---> CR/LF(13/10) "\n"---> ASCII 10<---輸入<---- CR/LF(13/10) Binary:"\n"---> LF(10) <-----> LF(10) 輸出輸入 (b)對檔案結束(EOF End-Of-File) 的偵測不同 文字模式檔--->檔案長度達到或讀到 ctrl-z 二進位模式檔--->檔案長度達到 7 - 2 兩種輸出輸入的方法 檔案輸出輸入的方法: (1)文字格式(Text Format)輸出入 (2)二進位格式(Binary Format)輸出入 文字資料: ASCII 碼儲存 數字資料:以二進位碼儲存。 當文字資料輸出時不管其輸出的方法是文字格式或二進位格式都一樣,為文字碼,不用轉換。 數字資料一般為二進位儲存,若用二進位的輸出入方法最為直接但是資料則不易看懂,若用文字方法輸出入則必需先將二進位的儲存資料轉為十進位再轉為ASCII 的文字碼再輸出。 例:一整數在記憶體中佔有兩個位元組 7---->0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 ----> 0X 00 07 127---->0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 ----> 0X 00 7F 二進位方法輸出: 7 --> 00 07 127 -->00 7F 文字方法輸出: 7 --> 37(ASCII) 127 -->31 32 37(ASCII) 程式處理過程的過渡資料則一般採用二進位的輸出入方法,可節省磁碟空間與執行時間。 若輸出入資料是供人閱讀則採用文字格式的輸出入方法。 文字輸出入格式或是二進位輸出入格式的採用,則決定於所使用的輸出入函數是文字格式或是二進位格式。 基本上兩種檔案模式與兩種輸出入方法,此二者可以形成四種搭配即: Text Formart --> Text Mode File Text Format --> Binary Mode File Binary Format --> Text Mode File Binary Format --> Binary Mode File 在 C++ 語言中此四種搭配都是合法的,但是在某些情況下檔案的資料可能會出問題。 例: Binary Format --> Text Mode File 0X10 --> 0X13 + 0X10 數字 --> 控制碼 0X26 --> EOF Text Format --> Binary Mode File 0X10 --> 0X10 Not 0X13+0X10 建議使用: 文字格式 -->文字模式檔 二進位格式 -->二進位模式檔 7 - 3 兩種輸出輸入的層次 兩種層次的輸出入函數: (1)標準輸出入(Standard I/O)或 資料流輸出入(Stream I/O) (2)低層次的輸出入函數 稱之為系統輸出入(Syatem I/O)。 高層次的輸出入是所提供的輸出入函數提供較多的服務,所有有關輸出入檔案的處理、資料的轉換、緩衝區(Buffer) 的管理等工作均是輸出入函數處理,對使用者而言若是輸出入資料是文字只要由輸出入函數和輸出入設備建立管道後,去讀寫即可。 系統輸出入則是屬於較低階的使用法,使用者必需自己作緩衝區的管理、資料的轉換等工作。 此兩種輸出入層次仍是決定於使用者使用那個函數。 7 - 4 開檔函數--檔案模式與檔案輸出入屬性的決定 所有的標準輸出入函數均再 stdio.h的表頭檔中作函數原型宣告, 因此要使用這些函數必需先引入此表頭檔。 開檔函數的格式為: FILE *fopen("file_name","attribute"); fopen 函數為標準輸出入的開檔函數,其需要兩個字串參數: (1)第一個是檔案名稱字串 (2)第二個是檔案屬性字串。 當開檔成功後 fopen 會傳回指向 FILE 結構的指標變數,FILE 結構是在 stdio.h 中宣告的資料結構,此資料結構包含檔案的編號、緩衝區、檔案指標、與檔案屬性等資料。傳入的檔案參數可以給全路徑的檔名。 檔案讀寫選擇及其屬性: 字 串 意 義 "r" 開一已存在的文字模式檔只供輸入用 "w" 開一新的文字模式檔只供輸出用 "a" 開一文字模式檔供由檔末附加資料 "rb" 開一已存在二進位模式檔只供輸入用 "wb" 開一二進位模式檔只供輸出用 "ab" 開一二進位模式檔供由檔末附加資料 "r+" 開一已存在文字模式檔供讀寫 "w+" 開一新文字模式檔供讀寫 "a+" 開一文字模式檔案供由檔末讀寫起 "rb+" 開一已存在二進位模式檔供讀寫 "wb+" 開一新二進位模式檔供讀寫 "ab+" 開一二進位模式檔案供由檔末讀寫起 上面的屬性中 b 表二進位模式檔案、 + 表示可讀寫檔案、w 是開新檔若檔案已存在則舊的資料會被蓋過、a 則由檔末附加資料。 #include
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
|
martialart
一般會員 發表:6 回覆:6 積分:7 註冊:2002-06-15 發送簡訊給我 |
http://www.superspeed.com
這家公司的Ramdisk軟體很不錯...
裡面也提到,開一個50MB的ramdisk,將IE的Temporary Internet Files設到ramdisk,可以省掉很多的disk I/O,我試過,真的很好用.... 我想到另一個問題,Ramdisk是否可以做到動態改變大小。
像superspeed出的RAMDISK軟體,如果要改變大小,必須先關閉ramdisk,在重新開啟才行。有沒有可能在不影響ramdisk裡面資料的情形下,動態改變大小。
對Windows來說,Ramdisk是一個硬體的磁碟(雖然是模擬出來的),而磁碟能不能夠做到動態改變大小?還請高手幫忙解惑.... 另外,現在的作業系統都有cache的機制,在使用ramdisk時,有沒有可能同樣的資料內容,在ramdisk裡有一份,另外在OS所使用的memory cache裡面又有一份?
這個問題就是說OS在讀取ramdisk裡的檔案時,是將該檔案視為從Disk讀取,還是視為從RAM裡讀取? 一堆雜七雜八的問題,打擾各位大大了...謝謝~~~
|
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
我試過好像最大250MB但是需修改
Msdos.sys的
AutoScan=1好像改為0
和C:\WINDOWS\COMMAND\Scandisk.ini
內容下的
Quit Causes ScanDisk to terminate if it encounters this problem.
即可超越50MB
設太大會有反效果 dos啟動無法載入ramdisk 2 視為從Disk讀取
3 另外在OS所使用的memory cache裡面又有一份?/回存用的
4 不需重新開啟但是須先將ramdisk再載入才行 所以是可以動態改變大小你再試看看
此公司也有NT版
忘了說此法也可以使用於印表機的圖片處理部份 將超大圖片檔分割之後整個由ramdisk讓硬體處理
等超大型CF卡或其他硬體現世 應該就不需要ramdisk了 因為機械式讀取將會淘汰
也解決速度上的困境 發表人 - jackkcg 於 2002/08/10 18:16:56 發表人 - jackkcg 於 2002/08/10 18:23:51
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
|
martialart
一般會員 發表:6 回覆:6 積分:7 註冊:2002-06-15 發送簡訊給我 |
謝謝jackkcg的解答...
我是用WinXP版來試的,在要重新設定新的ramdisk大小時,必須先將打開的ramdisk給remove掉,來後重新add一個ramdisk。因為原先的ramdisk必須remove掉,所以裡面的資料勢必消失,無法保留。所以我才在想有無可能直接改變ramdisk的大小,而不須先將ramdisk給remove之後,再重新增加一個... 在windows裡的DOS中有一個 subst.exe 的DOS版程式,可以將硬碟中任一個folder給map到指定的磁碟機代號,也就是虛擬磁碟...
有沒有可能在記憶體中開一個buffer,然後將這個buffer給map到一個磁碟機代號,如此只要動態改變buffer大小即可達到類似的效果。 另外以前在玩一些game時,有一個叫做fakecd的小程式,它利用一種叫做重導向的技術,讓對光碟機這個disk做寫入的動作時,可以設定變為對HD裡某個folder做寫入。所以可以將一些game的程式檔燒錄在光碟,玩的時候直接用光碟片裡的程式執行,而程式會認為這個disk是硬碟而不是光碟,所以可以存檔,而存檔的時候則會重導向到硬碟裡的folder。如此,硬碟裡面只須儲存遊戲存檔即可,大大的節省硬碟的空間。 我想請問,這種重導向的技術,有沒有可能應用到Ramdisk。在對ramdisk做寫入時,可以變成實際上對硬碟裡的檔案做寫入。如此,就可以不用擔心還要定時對ramdisk做備份,或是在程式中去做write back的動作.... 一些異想天開的想法,請賜教....
謝謝~~
|
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
請問martialart兄 可以借
subst.exe 的DOS版程式和fakecd的小程式玩玩嗎?
或告知下載試用版位置 我只玩過link的功能程式 關於
必須先將打開的ramdisk給remove掉,來後重新add一個ramdisk。因為原先的ramdisk必須remove掉,所以裡面的資料勢必消失,無法保留。所以我才在想有無可能直接改變ramdisk的大小,而不須先將ramdisk給remove之後,再重新增加一個
(天馬行空討論3)
讓我想了一下
1 如果資料找已a回存 又有b實體原資料 再加妳程式備份資料 為何怕資料勢必
消失,無法保留 暫時的消失是為了取更多資料(^-^有點巷廣告) 由於我的老師說我的思考是一種 跳藥式 (永遠不會專心)見笑見笑 一直希望也有其他人能 另類思考
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
|
martialart
一般會員 發表:6 回覆:6 積分:7 註冊:2002-06-15 發送簡訊給我 |
||
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
(轉貼)windows2000的ramdisk 的資料
有興趣之朋友 可以參考看看
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=20547
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |