日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > > 充電吧
[導(dǎo)讀]其實(shí)我早就想寫這樣的文章了,但是,這個(gè)明顯會(huì)挑起語(yǔ)言之爭(zhēng)么。作為一個(gè)多年的版主,筆者實(shí)在是不想這么做的。于是乎,文章的名字從《為啥你的C/C++代碼和別人的Java/C#/python/Ruby一樣慢

其實(shí)我早就想寫這樣的文章了,但是,這個(gè)明顯會(huì)挑起語(yǔ)言之爭(zhēng)么。作為一個(gè)多年的版主,筆者實(shí)在是不想這么做的。于是乎,文章的名字從《為啥你的C/C++代碼和別人的Java/C#/python/Ruby一樣慢》改成了現(xiàn)在的。筆者日常工作主要使用C#,那寫代碼好爽啊,根本不用在乎程序的運(yùn)行效率,因?yàn)樵趺磳懚己苈?。各種內(nèi)存new了不用釋放的特性被一個(gè)一個(gè)的語(yǔ)言采用,就和一個(gè)到處拉屎的寵物狗一樣。最后你發(fā)現(xiàn),總需要人幫他鏟屎。 程序運(yùn)行中需要各種各樣的資源,使用了都要?dú)w還。而所謂的內(nèi)存管理,垃圾回收中的內(nèi)存只是其中的一種資源。其他的呢?文件你能不關(guān)么?socket你能不斷么?鎖你能不解么?這種半吊子的解決資源回收問(wèn)題的方案,在筆者這種自詡完美主義者看來(lái)不是垃圾,就是拿出來(lái)騙人的!好了,牢騷發(fā)夠了,讓我們先看看激發(fā)我要寫這一系列文章的最后一根稻草。
?
公司拿回了被外包到印度的一個(gè)項(xiàng)目,C#代碼,我沒(méi)事看看的時(shí)候,發(fā)現(xiàn)這么一個(gè)函數(shù)(有修改)
?
 
        static string RandomString(int length)
        {
            Random random = new Random();
            const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            return new string(Enumerable.Repeat(chars, length)
                .Select(s => s[random.Next(s.Length)]).ToArray());
        }
?


就是從某個(gè)字符集中隨機(jī)產(chǎn)生一個(gè)字符串,讓我們看看這堆狗屎到底做了什么。

首先字符集是 chars,然后要產(chǎn)生字符串結(jié)果的長(zhǎng)度是length,這段代碼將字符集復(fù)制了length次,然后從每一個(gè)副本中隨機(jī)取一個(gè)組成一個(gè)列表,然后new 成一個(gè)字符串。各位吐了沒(méi)有?還好這個(gè)字符集,只有26+10個(gè)。要整一個(gè)Unicode的話,這段代碼直接要便秘了。 我直接想到的是有這么一種改進(jìn):
?
?
        static string MyRandomString1(int length)
        {
            Random random = new Random();
            const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            return new string(Enumerable.Range(0, length)
                .Select(i => chars[random.Next(chars.Length)]).ToArray());
        } 


至少,這段代碼不用復(fù)制字符集啊?

我直接把兩個(gè)函數(shù)調(diào)用1萬(wàn)次,length=10000。然后一比。什么?居然耗時(shí)差不多?(此處我放一個(gè)書簽,也就是我們這篇文章的point)。

當(dāng)時(shí)我認(rèn)為,C# release 優(yōu)化的還不錯(cuò)啊。于是乎寫下第二個(gè) 鄉(xiāng)民版

?
        static string MyRandomString2(int length)
        {
            Random random = new Random();
            const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            StringBuilder sb = new StringBuilder(length);
            for (int i = 0; i < length; ++i)
            {
                sb.Append(chars[random.Next(chars.Length)]);
            }
            return sb.ToString();
        }

?
果然這段代碼在性能是輕松碾壓上兩個(gè)。Intel 公司長(zhǎng)舒一口氣,果然 你是我的最好代言,要想使用語(yǔ)言新特性,請(qǐng)買酷睿最新第八代!
?
性能提升總是最誘人的,我下意識(shí)的想 如果用C++再寫一遍,這幫C#代碼要屁滾尿流到什么程度?
?
于是我就寫了寫,寫C++的時(shí)候慢了很多,因?yàn)槲疫€在乎性能,不能像C#那個(gè)隨意拉隨意撒了
?
        string cppRandom(int length) {
            static string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            static auto random = bind(uniform_int_distribution(0, chars.length() - 1), default_random_engine());
            string res;
            res.resize(length);
            for (int i = 0; i < length; ++i) {
                res[i] = chars[random()];
            }
            return res;
        }


寫完后,滿心歡喜的運(yùn)行,結(jié)果發(fā)現(xiàn) 只比前兩個(gè)linq版本 快不到四倍,比 鄉(xiāng)民版快不到兩倍。

才快一倍多,尼瑪我受打擊了,用不到linq,還要自己鏟屎,才給我快不到兩倍?。。。?/p>

如果牛掰的人現(xiàn)在已經(jīng)知道原因了,這也是我前面留書簽的地方。我不賣乖了,原因就是,

。

。

。

。

。

。

。

。

。

這么多函數(shù)貌似測(cè)試的是隨機(jī)數(shù)產(chǎn)生器的性能!是不是 恍然大悟?是不是茅塞頓開(kāi)?是不是有所回想?

這也就是本系列文章的引子,說(shuō)起代碼快慢,比較的時(shí)候最好不要參雜其他因素,上面的例子引入了隨機(jī)數(shù)在測(cè)試函數(shù)里,就是問(wèn)題。

于是乎,我就把幾萬(wàn)(一萬(wàn)個(gè)太小了)個(gè)隨機(jī)數(shù)先生成出來(lái)放在數(shù)組里,然后再測(cè)試,結(jié)果終于滿意了。
本文所有涉及代碼只貼片段,不提供完整代碼。你是碼農(nóng),不就是寫代碼的么?你應(yīng)該還要感謝我,所有代碼沒(méi)有上截圖。。。。
我從來(lái)不和別人爭(zhēng)辯哪個(gè)語(yǔ)言好,你說(shuō)你哪個(gè)語(yǔ)言好,大不了我就用C/C++把你的編譯器,解釋器虛擬機(jī)寫出來(lái),然后嵌入我的項(xiàng)目里(其實(shí)寫都不用寫,可能就是開(kāi)源的,還是C/C++代碼),再寫寫你那個(gè)語(yǔ)言的代碼,反正寫著也很快(不用擔(dān)心鏟屎什么的)。
?
當(dāng)然,在某些特定情況下解釋語(yǔ)言也很快,比如python的正則表達(dá)式解析匹配很快,幾乎可以匹敵C++。所以,我現(xiàn)在經(jīng)常把python嵌入到我的項(xiàng)目里,才幾兆~
?
?
?

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉