国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C#當(dāng)動態(tài)數(shù)據(jù)過大畫圖有困難時怎么辦?

這篇具有很好參考價值的文章主要介紹了C#當(dāng)動態(tài)數(shù)據(jù)過大畫圖有困難時怎么辦?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

筆者最近寫了一個監(jiān)控軟件, 數(shù)據(jù)量較大, 而所用插件刷新有壓力. 所以就寫了一個支持?jǐn)?shù)據(jù)抽取的大數(shù)據(jù)維護(hù)類.

        // 設(shè)計需求:
        // 會發(fā)生數(shù)據(jù)的新增, 并且在數(shù)據(jù)達(dá)到上限時自動去掉前半截數(shù)據(jù),
        // 高頻的等間隔讀取抽有數(shù)據(jù),
        // 數(shù)據(jù)結(jié)構(gòu)大小是可以在生成對象時提供, 并且對不提供大小參數(shù)的情況下使用默認(rèn)大小
        // 數(shù)據(jù)量較大(大約有40萬個元素),
        // 支持等距提取若干個數(shù)據(jù),
        //      比如從最后20000個樹種提取2000個數(shù)據(jù)(可通過參數(shù)設(shè)置這個數(shù)量),
        //      提取的規(guī)則是:返回提取的數(shù)據(jù)量, 將提取的數(shù)寫入到調(diào)用者提供的list中

        // 設(shè)計思路:
        // 使用List<T> 或LinkedList<T>都有一些弊端:
        // List<T> 在去除數(shù)據(jù)時,需要將后半部分的數(shù)據(jù)移動到前面,對于大數(shù)據(jù)量來說,性能開銷較大。
        // LinkedList<T> 在隨機(jī)訪問數(shù)據(jù)時,效率較低,因為需要從頭開始遍歷到目標(biāo)位置。
        // 在C#中,沒有現(xiàn)成的數(shù)據(jù)結(jié)構(gòu)可以同時滿足這些需求。因此,自己設(shè)計一個數(shù)據(jù)結(jié)構(gòu)來實現(xiàn)這些功能。
        // 將兩個List<T>結(jié)合使用,每個List<T>存儲一半的數(shù)據(jù)。當(dāng)數(shù)據(jù)達(dá)到上限時,丟棄第一個List<T>,并創(chuàng)建一個新的List<T>來存儲新的數(shù)據(jù)。
        public interface IDataExtractor<T>
        {
            (int startIndex, double interval) ExtractDataFromEnd(int lastCount, int extractCount, List<T> targetList);
        }

        public class LargeDataStructure<T> : IDataExtractor<T>
        {
            private const int DefaultHalfMaxRecordsNum = 60 * 60 * 24 * 7 * 2; // Default half of max records
            private int halfMaxRecordsNum;
            private List<T> firstHalf;
            private List<T> secondHalf;
            public int AllDataCount => firstHalf.Count + secondHalf.Count;

            public LargeDataStructure(int? maxRecordsNum = null)
            {
                this.halfMaxRecordsNum = (maxRecordsNum ?? DefaultHalfMaxRecordsNum) / 2;
                this.firstHalf = new List<T>(halfMaxRecordsNum);
                this.secondHalf = new List<T>(halfMaxRecordsNum);
            }

            public void Append(T data)
            {
                if (secondHalf.Count >= halfMaxRecordsNum)
                {
                    // Discard the first half and move the second half to the first
                    firstHalf = secondHalf;
                    secondHalf = new List<T>(halfMaxRecordsNum);
                }

                if (firstHalf.Count < halfMaxRecordsNum)
                {
                    firstHalf.Add(data);
                }
                else
                {
                    secondHalf.Add(data);
                }
            }

            public T this[int index] // indexer
            {
                get
                {
                    if (index < halfMaxRecordsNum)
                    {
                        return firstHalf[index];
                    }
                    else
                    {
                        return secondHalf[index - halfMaxRecordsNum];
                    }
                }
            }

            public (int, double) ExtractDataFromEnd(int lastCount, int extractCount, List<T> targetList)
            {
                targetList.Clear();
                int startIndex = Math.Max(0, AllDataCount - lastCount);
                int validCount = AllDataCount - startIndex;
                double interval = 1;

                if (extractCount >= validCount)
                {
                    // 提取的數(shù)量大于等于最后的數(shù)據(jù)量
                    for (int i = startIndex; i < AllDataCount; i++)
                    {
                        targetList.Add(this[i]);
                    }
                }
                else
                {
                    interval = (double)(validCount-1) / (extractCount - 1); // 計算浮點數(shù)等距間隔

                    for (int i = 0; i < extractCount; i++)
                    {
                        int index = (int)Math.Round(startIndex + interval * i);
                        index = Math.Min(index, AllDataCount - 1); // 確保不超過數(shù)據(jù)范圍
                        targetList.Add(this[index]);
                    }
                }
                return (startIndex, interval);
            }
        }
        private void TestExtractDataFromEnd()
        {
            LargeDataStructure<int> dataStructure = new LargeDataStructure<int>();

            // 添加一些數(shù)據(jù)用于測試
            for (int i = 0; i < 20; i++)
            {
                dataStructure.Append(i);
            }

            List<int> result = new List<int>();

            // 用例1.測試數(shù)據(jù)量不足,提取 30 個數(shù)據(jù)
            dataStructure.ExtractDataFromEnd(50, 30, result);
            Console.WriteLine("數(shù)據(jù)量不足,提取 30 個數(shù)據(jù):");
            foreach (int data in result)
            {
                Console.Write(data + " ");
            }
            Console.WriteLine();

            // 再添加一些數(shù)據(jù)用于測試
            for (int i = 20; i < 100; i++)
            {
                dataStructure.Append(i);
            }


            // 用例2.測試整數(shù)等距提取,提取 5 個數(shù)據(jù)
            dataStructure.ExtractDataFromEnd(10, 5, result);
            Console.WriteLine("整數(shù)等距提取(10個數(shù)據(jù)中提取5個):");
            foreach (int data in result)
            {
                Console.Write(data + " ");
            }
            Console.WriteLine();

            // 用例3.測試浮點數(shù)等距提取,提取 20 個數(shù)據(jù)
            dataStructure.ExtractDataFromEnd(30, 20, result);
            Console.WriteLine("浮點數(shù)等距提?。?0個數(shù)據(jù)中提取20個):");
            foreach (int data in result)
            {
                Console.Write(data + " ");
            }
            Console.WriteLine();

            // 用例4.測試尾部數(shù)超過需求數(shù), 想從5個數(shù)中提取100個(不合法參數(shù)
            dataStructure.ExtractDataFromEnd(5, 100, result);
            Console.WriteLine("尾部數(shù)超過需求數(shù)(5個數(shù)據(jù)中提取100個):");
            foreach (int data in result)
            {
                Console.Write(data + " ");
            }
            Console.WriteLine();

            Console.ReadLine();
        }

當(dāng)涉及處理大量數(shù)據(jù)時,LargeDataStructure類可以作為一個有用的工具。

該類可以存儲大量數(shù)據(jù),并提供了一些功能來操作和提取這些數(shù)據(jù)。以下是LargeDataStructure類的總結(jié):

  1. LargeDataStructure類的目的是處理大量數(shù)據(jù),它被設(shè)計為實現(xiàn)IDataExtractor接口。

  2. LargeDataStructure類內(nèi)部使用兩個List<int>對象(firstHalf和secondHalf)來存儲數(shù)據(jù)。這兩個列表分別表示數(shù)據(jù)的前半部分和后半部分。

  3. 構(gòu)造函數(shù)LargeDataStructure(int? maxRecordsNum = null)允許你創(chuàng)建一個LargeDataStructure對象,并可選地指定最大記錄數(shù)(maxRecordsNum)。如果未提供最大記錄數(shù),將使用默認(rèn)值。

  4. 方法Append(int data)用于將數(shù)據(jù)添加到LargeDataStructure對象中。如果secondHalf列表的大小達(dá)到最大記錄數(shù)的一半(halfMaxRecordsNum),則會丟棄firstHalf列表中的數(shù)據(jù),并將secondHalf作為新的firstHalf。然后,創(chuàng)建一個新的空的secondHalf列表來接收后續(xù)的數(shù)據(jù)。

  5. LargeDataStructure類還提供了索引器(this[int index]),允許你通過索引訪問LargeDataStructure對象中的數(shù)據(jù)。該索引器考慮了數(shù)據(jù)的分布,以正確地獲取指定索引位置的數(shù)據(jù)。

  6. 方法ExtractDataFromEnd(int lastCount, int extractCount, List<int> targetList)允許你從LargeDataStructure對象的末尾提取指定數(shù)量的數(shù)據(jù)。你可以指定最后的數(shù)據(jù)數(shù)量(lastCount),要提取的數(shù)據(jù)數(shù)量(extractCount)以及目標(biāo)列表(targetList)來接收提取的數(shù)據(jù)。

  7. 如果提取的數(shù)量大于等于最后的數(shù)據(jù)數(shù)量,ExtractDataFromEnd方法將提取所有最后的數(shù)據(jù)。否則,它將根據(jù)浮點數(shù)等距間隔從數(shù)據(jù)中提取相應(yīng)數(shù)量的數(shù)據(jù)。在計算浮點數(shù)等距間隔時,會考慮有效數(shù)據(jù)的數(shù)量,以確保提取不超過數(shù)據(jù)的范圍。

LargeDataStructure類提供了一種高效且靈活的方式來處理大量數(shù)據(jù),并具有數(shù)據(jù)添加、數(shù)據(jù)訪問以及從數(shù)據(jù)末尾提取數(shù)據(jù)的功能。這個類可以根據(jù)你的需求進(jìn)行進(jìn)一步的擴(kuò)展和定制。文章來源地址http://www.zghlxwxcb.cn/news/detail-490979.html

到了這里,關(guān)于C#當(dāng)動態(tài)數(shù)據(jù)過大畫圖有困難時怎么辦?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MySQL主從數(shù)據(jù)不一致,怎么辦?

    MySQL主從數(shù)據(jù)不一致,怎么辦?

    先給大家說個身邊的故事。 小伙伴二狗最近面宇宙廠,前面被問MySQL索引、鎖、主從復(fù)制原理時答的都很開心。 當(dāng) 面試官 問到?:“你們遇到主從不一致的問題怎么解決呢?你有什么更好的方案嗎?” 二狗 懵了。不就是讀寫時候走主,純讀走從嗎。。難道還有什么別的辦法

    2023年04月20日
    瀏覽(24)
  • MySQL數(shù)據(jù)被誤刪怎么辦?

    MySQL數(shù)據(jù)被誤刪怎么辦?

    很多年前,被公司外派到一家單位駐場開發(fā)一個OA項目,兩個開發(fā)對接各部門的需求,需求還要及時生效(一邊開發(fā)一邊使用)。有一次生產(chǎn)環(huán)境的一個bug本地沒辦法復(fù)現(xiàn),由于沒有測試人員,也就不存在測試環(huán)境,所以本地連了生產(chǎn)庫去調(diào)試。不出意外的話要出意外了:在

    2024年02月01日
    瀏覽(23)
  • 領(lǐng)導(dǎo)臨時要數(shù)據(jù)庫文檔怎么辦?

    領(lǐng)導(dǎo)臨時要數(shù)據(jù)庫文檔怎么辦?

    很多時候,我們?yōu)榱酥泵炮s項目進(jìn)度,很容易忽略整理文檔這件事 某一天,領(lǐng)導(dǎo)心血來潮,要搞一次突擊檢查, 想看看我們的數(shù)據(jù)庫設(shè)計的是否規(guī)范, 但他又不想親自去數(shù)據(jù)庫查驗(畢竟這么大領(lǐng)導(dǎo)) 那么,我們該怎么辦? 第一種方法:離職,世界那么大,我想去看

    2024年02月08日
    瀏覽(22)
  • 電腦提示數(shù)據(jù)錯誤循環(huán)冗余檢查怎么辦?

    電腦提示數(shù)據(jù)錯誤循環(huán)冗余檢查怎么辦?

    有些時候,我們嘗試在磁盤上創(chuàng)建分區(qū)或清理硬盤時,還可能會遇到這個問題:數(shù)據(jù)錯誤循環(huán)冗余檢查。這是如何導(dǎo)致的呢?我們又該如何解決這個問題呢?下面我們就來了解一下。 數(shù)據(jù)錯誤循環(huán)冗余檢查怎么解決呢?在回答這個問題之前我們需要先了解一下導(dǎo)致問題的原因

    2024年02月12日
    瀏覽(30)
  • 數(shù)據(jù)庫同步 Elasticsearch 后數(shù)據(jù)不一致,怎么辦?

    數(shù)據(jù)庫同步 Elasticsearch 后數(shù)據(jù)不一致,怎么辦?

    Q1:Logstash 同步 postgreSQL 到 Elasticsearch 數(shù)據(jù)不一致。 在使用 Logstash 從 pg 庫中將一張表導(dǎo)入到 ES 中時,發(fā)現(xiàn) ES 中的數(shù)據(jù)量和 PG 庫中的這張表的數(shù)據(jù)量存在較大差距。如何快速比對哪些數(shù)據(jù)沒有插入?導(dǎo)入過程中,Logstash 日志沒有異常。PG 中這張表有 7600W。 Q2:mq 異步雙寫數(shù)

    2024年02月15日
    瀏覽(23)
  • 服務(wù)器數(shù)據(jù)被盜了該怎么辦

    隨著互聯(lián)網(wǎng)的發(fā)展,如今人們習(xí)慣了在互聯(lián)網(wǎng)上分享生活、購物等等。便捷了人們的生活,也讓互聯(lián)網(wǎng)企業(yè)蓬勃生機(jī),但同時也暗藏著危機(jī)。其中服務(wù)器被入侵是常見的黑客攻擊方式,不僅會給企業(yè)帶來經(jīng)濟(jì)損失,同時也讓企業(yè)在公眾面前失去了信譽(yù)。下面我們來看看一些案

    2024年02月04日
    瀏覽(26)
  • 數(shù)據(jù)分析過程中,發(fā)現(xiàn)數(shù)值缺失,怎么辦?

    按照數(shù)據(jù)缺失機(jī)制,數(shù)據(jù)分析過程中,我們可以將其分為以下幾類: (1)完全隨機(jī)缺失(MCAR):所缺失的數(shù)據(jù)發(fā)生的概率既與已觀察到的數(shù)據(jù)無關(guān),也與未觀察到的數(shù)據(jù)無關(guān)。 (2)隨機(jī)缺失(MAR):假設(shè)缺失數(shù)據(jù)發(fā)生的概率與所觀察到的變量是有關(guān)的,而與未觀察到的數(shù)

    2024年02月05日
    瀏覽(23)
  • app滲透測試抓不到數(shù)據(jù)包怎么辦?

    app滲透測試抓不到數(shù)據(jù)包怎么辦?

    1、app滲透測試常見的模擬器有夜神,閃電模擬器等。 2、遇到問題,數(shù)據(jù)包抓不到? (1)最常見的解決方法調(diào)低模擬器安卓版本,使用MuMu模擬器,大部分app都適用,但是也有些app無法抓取。 (2)安裝證書到系統(tǒng)根證書,可以解決上面的問題(一般情況下手機(jī)在安裝了BurpSuite的偽證

    2024年02月13日
    瀏覽(22)
  • mysql數(shù)據(jù)庫忘記密碼了怎么辦

    mysql數(shù)據(jù)庫忘記密碼了怎么辦

    本人用的mysql8版本 看到網(wǎng)上很多教程,什么修改配置文件my.ini。在8版本根本沒用。以下是8版本解決辦法。親測可用。 1、用管理員身份打開命令行工具。(強(qiáng)調(diào):管理員身份) 2、停止mysql服務(wù): 3、輸入以下命令無密碼啟動mysql 4、 另開一個命令行窗口,輸入mysql -u root無密

    2024年02月11日
    瀏覽(22)
  • 使用JOIN查詢數(shù)據(jù)重復(fù),怎么辦?使用count統(tǒng)計怎么寫SQL?

    比如現(xiàn)在有兩個表tbl_a和tbl_b,如下: tbl_a id name 1 Bruce 2 Mike 3 Angela tbl_b id a_id :-: :-: 1 1 2 1 3 2 4 3 5 3 6 3 這時候我們?nèi)绻?lián)查的話,就會出現(xiàn)重復(fù)數(shù)據(jù): 這樣查出來的數(shù)據(jù)就會像下面這樣: id name 1 Bruce 1 Bruce 2 Mike 3 Angela 3 Angela 3 Angela 去重的方法有三種: 一、distinct 二、group

    2024年02月16日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包