Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
463db9e1
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
463db9e1
编写于
1月 25, 2016
作者:
J
Joao Moreno
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
suggest: skip lcsdiff for large datasets
related to #1923
上级
37919970
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
34 addition
and
28 deletion
+34
-28
src/vs/base/parts/tree/browser/treeView.ts
src/vs/base/parts/tree/browser/treeView.ts
+34
-28
未找到文件。
src/vs/base/parts/tree/browser/treeView.ts
浏览文件 @
463db9e1
...
...
@@ -931,55 +931,61 @@ export class TreeView extends HeightMap implements IScrollable {
afterModelItems
.
push
(
childItem
);
}
var
lcs
=
new
Diff
.
LcsDiff
({
getLength
:
()
=>
previousChildrenIds
.
length
,
getElementHash
:
(
i
:
number
)
=>
previousChildrenIds
[
i
]
},
{
getLength
:
()
=>
afterModelItems
.
length
,
getElementHash
:
(
i
:
number
)
=>
afterModelItems
[
i
].
id
},
null
);
var
diff
=
lcs
.
ComputeDiff
();
// this means that the result of the diff algorithm would result
// in inserting items that were already registered. this can only
// happen if the data provider returns bad ids OR if the sorting
// of the elements has changed
var
doToInsertItemsAlreadyExist
=
diff
.
some
(
d
=>
{
if
(
d
.
modifiedLength
>
0
)
{
for
(
var
i
=
d
.
modifiedStart
,
len
=
d
.
modifiedStart
+
d
.
modifiedLength
;
i
<
len
;
i
++
)
{
if
(
this
.
items
.
hasOwnProperty
(
afterModelItems
[
i
].
id
))
{
return
true
;
let
skipDiff
=
Math
.
abs
(
previousChildrenIds
.
length
-
afterModelItems
.
length
)
>
1000
;
let
diff
:
Diff
.
IDiffChange
[];
let
doToInsertItemsAlreadyExist
:
boolean
;
if
(
!
skipDiff
)
{
const
lcs
=
new
Diff
.
LcsDiff
({
getLength
:
()
=>
previousChildrenIds
.
length
,
getElementHash
:
(
i
:
number
)
=>
previousChildrenIds
[
i
]
},
{
getLength
:
()
=>
afterModelItems
.
length
,
getElementHash
:
(
i
:
number
)
=>
afterModelItems
[
i
].
id
},
null
);
diff
=
lcs
.
ComputeDiff
();
// this means that the result of the diff algorithm would result
// in inserting items that were already registered. this can only
// happen if the data provider returns bad ids OR if the sorting
// of the elements has changed
doToInsertItemsAlreadyExist
=
diff
.
some
(
d
=>
{
if
(
d
.
modifiedLength
>
0
)
{
for
(
var
i
=
d
.
modifiedStart
,
len
=
d
.
modifiedStart
+
d
.
modifiedLength
;
i
<
len
;
i
++
)
{
if
(
this
.
items
.
hasOwnProperty
(
afterModelItems
[
i
].
id
))
{
return
true
;
}
}
}
}
return
false
;
}
);
return
false
;
})
;
}
// 50 is an optimization number, at some point we're better off
// just replacing everything
if
(
!
doToInsertItemsAlreadyExist
&&
diff
.
length
<
50
)
{
for
(
var
i
=
0
,
len
=
diff
.
length
;
i
<
len
;
i
++
)
{
var
diffChange
=
diff
[
i
];
if
(
!
skipDiff
&&
!
doToInsertItemsAlreadyExist
&&
diff
.
length
<
50
)
{
for
(
let
i
=
0
,
len
=
diff
.
length
;
i
<
len
;
i
++
)
{
const
diffChange
=
diff
[
i
];
if
(
diffChange
.
originalLength
>
0
)
{
this
.
onRemoveItems
(
new
ArrayIterator
(
previousChildrenIds
,
diffChange
.
originalStart
,
diffChange
.
originalStart
+
diffChange
.
originalLength
));
}
if
(
diffChange
.
modifiedLength
>
0
)
{
var
beforeItem
=
afterModelItems
[
diffChange
.
modifiedStart
-
1
]
||
item
;
let
beforeItem
=
afterModelItems
[
diffChange
.
modifiedStart
-
1
]
||
item
;
beforeItem
=
beforeItem
.
getDepth
()
>
0
?
beforeItem
:
null
;
this
.
onInsertItems
(
new
ArrayIterator
(
afterModelItems
,
diffChange
.
modifiedStart
,
diffChange
.
modifiedStart
+
diffChange
.
modifiedLength
),
beforeItem
?
beforeItem
.
id
:
null
);
}
}
}
else
if
(
diff
.
length
)
{
}
else
if
(
skipDiff
||
diff
.
length
)
{
this
.
onRemoveItems
(
new
ArrayIterator
(
previousChildrenIds
));
this
.
onInsertItems
(
new
ArrayIterator
(
afterModelItems
));
}
if
(
diff
.
length
)
{
if
(
skipDiff
||
diff
.
length
)
{
this
.
onRowsChanged
();
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录