Там некоторый лучший путь состоит в том, чтобы скопировать все Поля DataSet и их свойства к другому DataSet?

потому что вы меня заинтриговали. я создал такое же тестирование, которое выглядит следующим образом:

console.time('observable');
for(let i = 0; i < 10000; i++) {
  let user$ = of({
    name: 'yanis-git'
  });

  user$.subscribe(user => {
    // do something. Prefer not console.log because is ressource consuming.
  });
}
console.timeEnd('observable');

console.time('promise');
for(let i = 0; i < 10000; i++) {
  new Promise((resolve) => {
    resolve({
      name: 'promise'
    });
  }).then(user => {
    // do something. Prefer not console.log because is ressource consuming.
  });
}
console.timeEnd('promise');

и результат выглядит так (может отличаться в вашем браузере / настройке, но пропорция должна быть одинаковой:

observable: 34.060791015625ms
promise: 103.4609375ms

РЕДАКТИРОВАТЬ :

Другая реализация с асинхронной чертой внутри:

console.time('observable');
for(let i = 0; i < 10000; i++) {
  let user$ = Observable.create((o) => {
    setTimeout(() => {
      o.next({
        name: 'observable'
      });
    });
  });

  user$.subscribe(user => {
    // do something. Prefer not console.log because is ressource consuming.
  });
}
console.timeEnd('observable');

console.time('promise');
for(let i = 0; i < 10000; i++) {
  new Promise((resolve) => {
    setTimeout(() => resolve({
      name: 'promise'
    }))
  }).then(user => {
    // do something. Prefer not console.log because is ressource consuming.
  });
}
console.timeEnd('promise');

Результат близок, но раса побеждает благодаря наблюдаемой.

observable: 160.162353515625ms
promise: 213.40625ms

живая выборка [114 ]

если вы хотите проверить стек, пожалуйста, используйте реальную консоль браузера, чтобы увидеть вывод таймера

6
задан Fabio Gomes 19 December 2008 в 12:53
поделиться

4 ответа

Вы ищете более эстетический способ сделать его или более быстрый способ сделать его?

Если первый, создайте свои собственные классы, которые скрывают цикл.

Если последний, даже не волнуйтесь об этом. Очень мудрый кодер однажды сказал мне: затраты на доступ к диску; затраты на доступ к сети; возможно, экранируйте затраты доступа; все остальное свободно.

Не путайте размер исходного кода со временем выполнения. Цикличное выполнение тысячу раз через память и копирование битов является необнаруживаемым по сравнению с начальным квитированием соединения с базой данных.

Удачи

4
ответ дан 8 December 2019 в 16:12
поделиться

Если Вы просто хотите скопировать определения поля, можно сделать следующее:

ds2.FieldDefs.Assign(ds1.FieldDefs);
ds2.CreateDataSet;
ds2.Open;

Конечно, это предполагает создание FieldDefs для ds1.

8
ответ дан 8 December 2019 в 16:12
поделиться

Если Вы собираетесь циклично выполниться через набор данных для создания копии, не забудьте называть DisableControls на нем прежде, и EnableControl впоследствии.

Без этого вещи могут стать действительно медленными, если у Вас есть визуальные средства управления, показывающие данные набора данных на Вашей форме.

2
ответ дан 8 December 2019 в 16:12
поделиться

CloneCursor работал бы на Вас?

1
ответ дан 8 December 2019 в 16:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: