鍍金池/ 問答
孤星 回答

好久沒看到想答的問題了,來一波

a. 這個問題和redis毫無關系

b. 上代碼

<?php
//splat.php
function gen() {
  global $argv;
  $max = $argv[1];
  while($max--) {
    yield(str_repeat('x', 10000));
  }
}

function noop() {

}

function getargs() {
  $arg = func_get_args();
}

function splat(...$arg) {

}

function printmemory($msg) {
  printf("%s: %d/%d\n", $msg, memory_get_usage(), memory_get_peak_usage());
}

printmemory(__LINE__);
$gen = gen();
printmemory(__LINE__);
foreach(gen() as $r) {
  crc32($r);
}
printmemory(__LINE__);
$argv[2](...$gen);
printmemory(__LINE__);
~/Desktop $ php splat.php 10000 getargs
27: 357896/394272
29: 358504/394272
33: 370816/394272
35: 382912/123779064
~/Desktop $ php splat.php 10000 noop
27: 357896/394272
29: 358504/394272
33: 370816/394272
35: 382912/123250912
~/Desktop $ php splat.php 10000 splat
27: 357896/394272
29: 358504/394272
33: 370816/394272
35: 382912/123779064
~/Desktop $ php splat.php 1000 splat
27: 357896/394272
29: 358504/394272
33: 370816/394272
35: 382912/12695544
~/Desktop $ php splat.php 100 splat
27: 357896/394272
29: 358504/394272
33: 370816/394272
35: 382912/1607672

c. 解釋

27-29-33之間,幾乎沒有內(nèi)存占用,這是所謂的"生成器節(jié)省內(nèi)存”的現(xiàn)象,也就是各種相關文章里都會解釋的,在30行迭代生成器的時候,每次循環(huán)都會進到生成器內(nèi)部去yield一次,產(chǎn)生一個大字符串,下次循環(huán)的時候循環(huán)變量又重新被賦值,之前的字符串自然會被GC回收,所以無論循環(huán)多大多少次,占用的內(nèi)存是穩(wěn)定的(包括上面的$gen=gen()也是幾乎不占內(nèi)存的)

33-35,無論被調(diào)用的函數(shù)如何,甚至noop函數(shù),都一樣會占用大量內(nèi)存,占用內(nèi)存的量明顯和次數(shù)成正比,也就是說生成器的內(nèi)容被合并到一起而占用了一整塊內(nèi)存。這其實很容易解釋,幾乎的所有語言“調(diào)用函數(shù)”的過程都是類似的

  1. 首先計算所有參數(shù),形成參數(shù)列表
  2. 生成call frame(其中包含調(diào)用被調(diào)雙方、文件行號、參數(shù)列表等等信息),壓入call stack中
  3. 控制權移交給函數(shù)內(nèi)部

(當然省略了超級多的細節(jié),比如實參形參的映射/copy啊,內(nèi)存管理啊等等什么的,和本題無關)

...$args這個操作符其實影響的就是第一個階段,計算參數(shù)的時候,看到...操作符,就需要展開其中的參數(shù)來形成參數(shù)列表,那么用生成器的場合,這個階段內(nèi)存就從原有生成器的少量占用變成了完整的占用了,所以即使是空的noop函數(shù)也會占用幾乎一樣多的內(nèi)存,你的理解是正確的

回到原題的那個redis問題的話,因為重復調(diào)用redis方法一定會占用大量的額外網(wǎng)絡開銷,而一次性批量插入又鐵定逃不開內(nèi)存占用(其實你想redis擴展要發(fā)送這個批量的指令給redis,那么這塊內(nèi)存肯定是要的),比較好的方式就是分組了,每1000個或者10000個合并成一次$redis調(diào)用,mysql也好其他場景也是類似的

咕嚕嚕 回答

在打開和寫入文件時,寫明編碼格式即可
encoding='utf8'

data=open("cardno.txt",encoding= 'utf8')
result=open("result.txt","w",encoding= 'utf8') #指定文件的編碼格式

冷咖啡 回答

嘗試一下設置font-size?

吢涼 回答

你自己都寫了%p啊,它怎么會輸出值呢?

氕氘氚 回答

暫時不能,可以考慮通過控制兩個組件 v-if 來實現(xiàn)

淡墨 回答
'您有$[NUM_2]件快遞請到$[TXT_32]領取'.match(/\$\[[^\]]*?\]/g)
痞性 回答

dcloud論壇提問得到回答的

http://ask.dcloud.net.cn/ques...

轉(zhuǎn)載:dcloud論壇

DCloud_heavensoft :

uni-app可以編譯到小程序。
自己引入vue體驗不行,vue在web上是為單頁應用而生的,在app上,單頁應用會卡死。
uni-app還有自動的框架預載,加載頁面的速度更快。
當然,如果你5+玩的超級溜,各種預載都做的很好,vue也改造適應了5+app,那體驗和uni-app會一樣。但這個難度很大,uni-app輕松就可以得到好體驗。

當然uni-app不能操作dom,這個有好有壞。
微信小程序之所以屏蔽dom,就是為了性能,dom的性能確實不好。
但dom生態(tài)比較豐富,可用三方庫很多。
好在目前微信小程序生態(tài)也起來了,各種無dom的組件庫,所以uni-app現(xiàn)在推出來也不太擔心生態(tài)問題。

離魂曲 回答
-------------------------------
port1 = list(score.index)[: len(score)//5]
port2 = list(score.index)[ len(score)//5: 2*len(score)//5]
port3 = list(score.index)[ 2len(score)//5: -2len(score)//5]
port4 = list(score.index)[ -2*len(score)//5: -len(score)//5]
port5 = list(score.index)[ -len(score)//5: ]
--------------------------------

from collections import deque

# deque([f1, f2, f3, f4, f5, f6, f7, f8, f9, f10])
list_ = deque(score.index)
eq = 5
el = len(score)//eq  # = 2

#     1         2         3         4         5    -> eq (然后將整個數(shù)據(jù)5等分)
#[[f1, f2], [f3, f4], [f5, f6], [f7, f8], [f9, f10]]
port = [[list_.popleft() for _ in range(el)] for _ in range(eq)]

i don't have any idea about "def calculate_port_daily_return"
check it plz: https://www.quantopian.com/posts/how-to-calculate-daily-return
撥弦 回答

收到RST的socket,第一次觸發(fā)可讀,read返回-1并設置errno,不close得話,繼續(xù)觸發(fā)可讀,再read便會返回0。

舊時光 回答

你的SecondTitletable2個router-view是同級的,但是把table渲染在SecondTitlechildren里面肯定出不來啊,除非SecondTitle渲染出來的組件里面也有個name=tablerouter-view
如果你一定要把他們當成同級的,大概是這樣寫的,沒實測,體會一下代碼意思自己改

{
  //首頁
  path: '/layout',
  name: 'layout',
  // redirect: 'layout/TwoLevelHeadlines',
  component: () => import('@/views/layout/AppMain'),
  children: [
    //部門設置
    {
      name: 'department',
      path: 'BasicSettingsTitle/department',
      components: {
        SecondTitle: () => import('@/views/layout/SecondTitle/BasicSettingsTitle'),
        table: () => import('@/views/supplier/basicSettings/department')
      }
    },
    //用戶管理
    {
      name: 'userment',
      path: 'BasicSettingsTitle/userment',
      components: {
        SecondTitle: () => import('@/views/layout/SecondTitle/BasicSettingsTitle'),
        table: () => import('@/views/supplier/basicSettings/userment')
      }
    },
  ]
}
薔薇花 回答

是啊。

git 把分支信息存放在 .git/refs/heads 目錄中,每個分支是一個文件。
如果你打開這個目錄看一下就會發(fā)現(xiàn),你的 sss 分支是一個名叫 sss 的文件,而 sss1/a 分支是 sss1/ 目錄下名叫 a 的文件。如果你要創(chuàng)建 sss/a 分支的話,git 會嘗試在 sss/ 目錄下創(chuàng)建 a 文件,而 sss 已經(jīng)存在并且不是個目錄,所以不允許創(chuàng)建。

離夢 回答

p_code 是int類型呀。但是你的like后面是字符串,需要類型轉(zhuǎn)化的列,mysql 是不走索引的。

你把p_code 修改為 varchar類型就可以了。一般like用在字符串類型的列上面。

病癮 回答

使用第三方插件,類似于引入Echarts,jQuery這樣的,不用非要是 Angular2 寫的。
給你推薦一個項目:freeng,里面有 ShareButton 這個組件,包括騰訊,微博等網(wǎng)站的分享。

假灑脫 回答

建議讀一本golang入門書,事半功倍

紓惘 回答

[

    h('span', {
            slot: 'open'
    }, 'ON'),
    h('span', {
            slot: 'open
    }, 'OFF')
]

這樣就好了

柒槿年 回答

賦值表達式的返回值就是右值。(也存在 this 丟失問題。

伐木累 回答

_my_func 是你注冊給 windowTitleChanged 的函數(shù),setWindowTitle 時就會調(diào)用它。

此時 _my_func 的參數(shù) s 不為空,值為 setWindowTitle 時的值即 My First App。

我以為 回答

大家有什么好的思路沒有。。

魚梓 回答

Webkit,了解一下。
調(diào)試的話,老早做的Qt4版本沒有控制臺,不過有個調(diào)試類可以嘗試用一下QWebInspector,把他嵌入到一個QDialog用即可,就像這樣:

QDialog dlg;

QWebInspector *i = new QWebInspector(this);
dlg.setLayout(new QVBoxLayout());
dlg.layout()->addWidget(i);
dlg.setModal(false);
dlg.show();
dlg.raise();
dlg.activateWindow();