【发布时间】:2010-10-08 12:39:11
【问题描述】:
简洁
如何调整我的 Linq To SQL DAL 方法的性能?特别是正在传输的数据量。
详细
我有一个 Winform 应用程序,它使用 Linq To Sql 来访问它的数据。我们有 5 个分支,其中 1 个在物理上与 SQL 服务器位于同一位置,另外 4 个在不同的距离和带宽上。我的应用是典型的 Enterprise LOB CRUD 应用。你搜索一个人,选择他们,然后当你选择一个控件时,比如说人口统计,它会加载那个人的人口统计数据并将它们显示在屏幕上。
我只存储“基石”ID,然后使用这些主键进行数据库调用。这在 Main 位置非常有效,SQL Server 在现场。但是,分支在加载某些控件时遇到了严重的延迟。
这是我的 DAL 的一个相当典型的示例(加载人员详细信息用户控件):
public static DataTable GetGeneralPersonInfo(int personID)
{
using (var context = ConnectDataContext.Create())
{
var generalPersonInfo = from person in context.tblPersons
where person.PersonID == personID
join addresse in context.tblAddresses.Where(a =>a.AddressTypeID == 'm') on person.PersonID equals
addresse.PersonID
select
new
{
person.PersonID,
person.FirstName,
person.MiddleName,
person.LastName,
person.SuffixID,
person.TitleID,
addresse.AddressLine1,
addresse.AddressLine2,
addresse.AddressLine3,
addresse.CityName,
addresse.StateID,
addresse.ZipCode,
addresse.ZipPlus,
addresse.DirectionsToAddress,
addresse.CountyID,
person.ResidencyCountyID,
person.ResponsibilityCountyID,
person.EmailAddress,
person.SSN,
person.Gender,
person.BirthDate,
person.DeathDate,
person.DriversLicenseNumber,
person.DriversLicenseStateID,
person.HispanicOriginFlag,
person.CitizenFlag,
person.VeteranFlag,
person.MaritalStatusID,
person.PrimaryRaceID,
person.SecondaryRaceID,
person.UpdateUserID,
person.UpdateDateTime,
person.InsertDateTime,
person.InsertUserID,
};
return generalPersonInfo.CopyLinqToDataTable();
}
}
那里有什么明显的错误吗?
为了进一步披露,每个表都有一个uniqueidentifier,它不是PK。另外,我有非常宽的表格(60+ 列)和大文本字段(varchar(500 - max))。
【问题讨论】:
-
已编辑以显示更详细的示例。
-
仅供参考 - 我们有一个 3 mb 的 wan 到这个分支
标签: .net winforms linq performance linq-to-sql