1

Chrome Silverlight のレンダリングは、Firefox や Internet Explorer に比べて非常に遅い (推定: 10 倍遅い)。これは、次のサンプル コードを使用して簡単にテストできます。サンプル コードは、データ グリッド内の 15000 のランダム データ レンダリングを示しています。

なぜこれが起こっているのか、何か意見はありますか?私の頭に浮かんだ2つの推測があります。

  1. Google は、Microsoft の Silverlight が自社のプラットフォームで広く使用されることを望んでいません。
  2. Chrome のインフラストラクチャが原因で、プラグインのレンダリングが遅くなります。

XAML 部分:

<UserControl x:Class="sample.view.MemberView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"    
    xmlns:viewmodel="clr-namespace:sample.ViewModel"
    mc:Ignorable="d"
    >
    <UserControl.Resources>
        <viewmodel:MemberViewModel x:Key="viewModel"/>
    </UserControl.Resources>
    <Grid x:Name="LayoutRoot" VerticalAlignment="Stretch" DataContext="{Binding Source={StaticResource viewModel}}">
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition Height="35"></RowDefinition>
        </Grid.RowDefinitions>
        <data:DataGrid BorderThickness="1" ItemsSource="{Binding Members}" VirtualizingStackPanel.VirtualizationMode="Recycling">
            <data:DataGrid.Columns>
                <data:DataGridTextColumn Header="Name" Width="3*" Binding="{Binding FirstName}"/>
                <data:DataGridTextColumn Header="Surname" Width="3*" Binding="{Binding LastName}"/>
                <data:DataGridTextColumn Header="GSM" Width="3*" Binding="{Binding MobilePhone}"/>
                <data:DataGridTextColumn Header="Email" Width="3*" Binding="{Binding Email}"/>
                <data:DataGridTextColumn Header="BirthDate" Width="2*" Binding="{Binding BirthDate}}"/>
            </data:DataGrid.Columns>
        </data:DataGrid>
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Grid.Row="1">
            <Button Content="Get Random Data" Width="120" Height="25" Margin="5" Command="{Binding GetRandomDataCommand}"/>
        </StackPanel>
    </Grid>
</UserControl>

C# 部分:

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Net;
using System.Text;
using System.Windows;
using System.Windows.Browser;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace sample.ViewModel
{
    public class MemberModel
    {
        public string FirstName { get; set; }

        public string LastName { get; set; }

        public string MobilePhone { get; set; }

        public string Email { get; set; }

        public DateTime BirthDate { get; set; }
    }

    public class MemberViewModel
    {
        private List<MemberModel> _members;
        public List<MemberModel> Members
        {
            get
            {
                return _members;
            }
            set
            {
                _members = value;
                RaisePropertyChanged(new PropertyChangedEventArgs("Members"));
            }
        }
        public MyCommand GetRandomDataCommand { get; set; }

        public MemberViewModel()
        {
            GetRandomDataCommand = new MyCommand();
        }
    }

    public class MyCommand : ICommand
    {
        public bool CanExecute(object parameter)
        {
            return true;
        }

        public event EventHandler CanExecuteChanged;

        private static Random random = new Random();
        public void Execute(object parameter)
        {
            List<MemberModel> members = new List<MemberModel>();
            for (int i = 0; i < 15000; ++i)
            {
                MemberModel m = new MemberModel();
                m.FirstName = GetRandomString(random.Next(5) + 4);
                m.LastName = GetRandomString(random.Next(5) + 4);
                m.Email = GetRandomString(random.Next(10) + 4);
                m.MobilePhone = GetRandomString(random.Next(12));
                m.BirthDate = DateTime.Now.AddYears(-random.Next(50) - 18).AddMonths(random.Next(12)).AddDays(random.Next(30));
                members.Add(m);
            }
        }

        private string GetRandomString(int length)
        {
            StringBuilder srb = new StringBuilder();
            for (int i = 0; i < length; ++i)
            {
                srb.Append((char)(65 + random.Next(29));
            }
            return srb.ToString();
        }
    }

}
4

2 に答える 2

0
  1. Google は、Microsoft の Silverlight が自社のプラットフォームで広く使用されることを望んでいません。
    A:私の経験では、これは Google 側の問題ではありません。Microsoft サポートに電子メールを送信する前の数週間、あなたが説明したのと同じ問題があり、IE を使用するように勧められました。Chrome での動作が非常に遅い理由について、彼らは私に答えませんでした。

  2. Chrome のインフラストラクチャが原因で、プラグインのレンダリングが遅くなります。
    A:繰り返しますが、これはまったく真実ではありません。この問題は Microsoft が原因です。Silverlight はもう気にしないようです。この理由から、製品を ASP.NET MVC に移行する予定です。

于 2012-10-12T08:54:23.970 に答える
0

メルハバ、

数日前、msdn ページに遭遇しました。Silverlight は IE 用に x64 をサポートしていると書かれています。x86 としてサポートされている Safari および Chrome ブラウザー。その結果、あなたは正しいです。このAFAIKのほかに、Firefoxにはx64セットアップがありません。

ただし、Silverlight 5 では状況が変わる可能性があります。

私はIE、Microsoftも提供しています:)

于 2012-10-12T08:25:20.037 に答える