免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
統(tǒng)計(jì)一個(gè)大文本行數(shù)的幾種方法以及效率統(tǒng)計(jì)(二)



.NET4.0 + MemoryMapping + ReadByte()


該方法的思路主要是通過內(nèi)存映射的原理,訪問文件內(nèi)容,由于在.net環(huán)境下不能一次性映射太大的文件,所以仍然采用分塊映射的方式:


主要代碼如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/// <summary>
/// MemoryMapping + ReadByte()
/// </summary>
unsafe static void CalulateLine_MemoryMapping_ReadByte(uint oneBlockSize)
{
    const string FILE_MAPPING_NAME = "~MappingTemp";
    const int LINE_MIN_SIZE = 30;
    long lineCount = 0;
    IntPtr fileHandle = ShareMemory.CreateFile(
        FILE_NAME,
        ShareMemory.GENERIC_READ | ShareMemory.GENERIC_WRITE,
        FileShare.Read | FileShare.Write,
        IntPtr.Zero,
        FileMode.Open,
        ShareMemory.FILE_ATTRIBUTE_NORMAL | ShareMemory.FILE_FLAG_SEQUENTIAL_SCAN,
        IntPtr.Zero);
    uint fileSize = ShareMemory.GetFileSize(fileHandle, IntPtr.Zero);
    if (ShareMemory.INVALID_HANDLE_VALUE != (int)fileHandle)
    {
        IntPtr mappingHandle = ShareMemory.CreateFileMapping(
            (int)fileHandle,
            IntPtr.Zero,
            ShareMemory.PAGE_READWRITE,
            0,
            0,
            FILE_MAPPING_NAME);
        if (mappingHandle != IntPtr.Zero)
        {
            uint mapFlag = 0;
            while (mapFlag <= fileSize)
            {
                uint eachMappingSize = oneBlockSize;
                if (fileSize - mapFlag < oneBlockSize)
                {
                    eachMappingSize = fileSize - mapFlag;
                }
                IntPtr pHead = ShareMemory.MapViewOfFile(
                mappingHandle,
                (uint)(ShareMemory.FILE_MAP_READ),
                0,
                mapFlag,
                eachMappingSize);
                int lastError = ShareMemory.GetLastError();
                if (pHead != IntPtr.Zero)
                {
                    long flag = 0;
                    while (flag < eachMappingSize)
                    {
                        //byte* pbHead= (byte*)pHead;
                        //byte temp = *(pbHead + flag);
                        byte temp = Marshal.ReadByte((IntPtr)((int)pHead + flag));
                        if (temp == 0x0D)
                        {
                            lineCount++;
                            flag += LINE_MIN_SIZE;
                        }
                        flag++;
                    }
                    ShareMemory.UnmapViewOfFile(pHead);
                }
                mapFlag += oneBlockSize;
            }
            ShareMemory.CloseHandle(mappingHandle);
        }
        ShareMemory.CloseHandle(fileHandle);
    }
}

測(cè)試結(jié)果:



.NET4.0 + MemoryMapping + Unsafe


使用unsafe代碼,就是在上面代碼的基礎(chǔ)上,做了一些簡(jiǎn)單的修改。


 


1
2
byte* pbHead = (byte*)pHead;
byte temp = *(pbHead + flag);

1
  

測(cè)試結(jié)果:


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C# 使用Google API進(jìn)行手機(jī)基站定位資料整理
[WinApi] C#獲取其他窗口文本框內(nèi)容
單片機(jī)STM32的LCD12864顯示(1)
筆記5:vb.net的FileStream操作
字庫MX25L1605D的驅(qū)動(dòng)程序
I2C簡(jiǎn)單例程
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服