赏梅斋

关注微软技术

博客园 首页 新随笔 联系 订阅 管理

2011年2月11日 #

摘要: 在事件接收器中使用对象不要在事件接收器内实例化 SPWeb、SPSite、SPList 或 SPListItem 对象。实例化这些对象而非使用通过事件属性传递的实例的事件接收器可能会导致以下问题: 大量额外的数据库往返(一次写入操作会导致在每个事件接收器中出现多达 5 次的额外往返)。 对这些实例调用 Update 方法会导致在其他注册的事件接收器中的后续 Update 调用失败。 不良的编码实践 在事件接收器内安装一个 SPSite 对象 public override void ItemDeleting(SPItemEventProperties properties){ using (S 阅读全文
posted @ 2011-02-11 18:21 赏梅斋 阅读(666) 评论(0) 推荐(0) 编辑

摘要: SPWeb.ParentWeb 属性释放清理是由 SharePoint Foundation 和 SharePoint Server 自动处理的。良好的编码实践using (SPSite site = new SPSite("http://www.msiw.net/")) { using (SPWeb web = site.OpenWeb()) { SPList list = web.Lists["Announcements"]; SPWeb parentWeb = list.ParentWeb; //No explicit dispose requir 阅读全文
posted @ 2011-02-11 18:12 赏梅斋 阅读(1113) 评论(0) 推荐(0) 编辑

摘要: 通常,调用应用程序无论何时使用新 SPSite 构造函数(任何签名),都应该在用完对象之后调用 Dispose() 方法。如果 SPSite 对象是从 GetContextSite() 中获得的,则该调用应用程序不 应该释放对象。因为 SPWeb 和 SPSite 对象会保留通过此方式派生的内部列表,所以释放对象可能会导致 SharePoint 对象模型行为无法预料。SharePoint Foundation 在页面完成之后会在内部枚举此列表以正确释放对象。SPSiteCollection 类SPSiteCollection.Add 方法SPSiteCollection.Add 方法将创建并返 阅读全文
posted @ 2011-02-11 18:04 赏梅斋 阅读(856) 评论(0) 推荐(0) 编辑

摘要: 可以采用某些编码技术来确保释放对象。这些技术包括在代码中使用以下内容: Dispose 方法using 语句try 、catch 和 finally 块Dispose 与 Close 方法的用途SPWeb 对象和 SPSite 对象的 Dispose 和 Close 方法作用相同。Dispose 方法调用对象的 Close 方法。我们建议调用 Dispose 方法,而不是调用 Close 方法,因为 SPWeb 和 SPSite 对象实现 IDisposable 接口,标准 .NET Framework 垃圾收集调用 Dispose 方法从内存中释放与对象关联的任何资源。using 语句通过使 阅读全文
posted @ 2011-02-11 17:51 赏梅斋 阅读(457) 评论(0) 推荐(0) 编辑

摘要: 通过提出以下问题,可以确定是否可能存在错误释放的对象:应用程序池是否频繁进行回收,尤其是在负载过重的情况下(假设应用程序池被设置为在达到内存阈值时进行回收)?内存阈值应该在 800 MB 到 1.5 GB 之间,假设 RAM 至少为 2 GB。如果将应用程序池回收设置为在较接近 1 GB 时发生,则效果最佳,但是请根据试验来确定最适合您的环境的设置。如果回收设置太低,则系统可能因应用程序池频繁进行回收而遇到性能问题。如果设置太高,则系统可能会因页面交换、内存碎片和其他问题而遇到性能问题。系统性能是否低下,尤其是在负载过重的情况下?当内存使用量开始增加时,系统必须进行补偿,例如,通过对内存进行分 阅读全文
posted @ 2011-02-11 17:42 赏梅斋 阅读(416) 评论(0) 推荐(0) 编辑

摘要: Microsoft SharePoint Foundation 2010 和 Microsoft SharePoint Server 2010 对象模型中的对象可用作处理 SharePoint Foundation 数据的接口。开发人员经常调入对象模型以从 SharePoint Foundation 2010 和 SharePoint Server 2010 数据存储中读取数据或向其中写入新数据。SharePoint Foundation 2010 和 SharePoint Server 2010 对象模型包含实现 IDisposable 接口的对象。使用这些对象时必须采取防范措施,防止它们长 阅读全文
posted @ 2011-02-11 17:40 赏梅斋 阅读(472) 评论(0) 推荐(0) 编辑

摘要: 许多开发人员都使用 Microsoft .NET Framework 缓存对象(例如 System.Web.Caching.Cache)帮助更好地利用内存并提高总体系统性能。但是,许多对象都不是“线程安全的”,缓存这些对象会导致应用程序失败,并导致意外或无关的用户错误。缓存数据和对象缓存是提高系统性能的一种很好的方法。但是,您必须根据线程安全性的需要权衡缓存的好处,因为有些 SharePoint 对象不是线程安全的,缓存会导致它们行为异常。缓存非线程安全的 SharePoint 对象您可能会尝试通过缓存从查询返回的 SPListItemCollectio 阅读全文
posted @ 2011-02-11 17:36 赏梅斋 阅读(718) 评论(0) 推荐(0) 编辑

摘要: 当文件夹和列表的大小增加时,您必须设计处理它们的自定义代码以优化性能。否则,您的应用程序将会运行缓慢,并可能引起服务或页面加载超时。处理大文件夹和列表时主要需要关注以下两个方面:查询限制,随着时间的推移,当您的网站不断发展并且您的查询开始返回超过查询阈值的项目时,这会引发您的代码行为发生不可预测的意外更改。 从大文件夹和列表中高效检索项目。 为了解决这两个问题,您必须了解对象模型是如何与文件夹和列表交互的。大列表查询的限制Microsoft SharePoint Foundation 2010 和 Microsoft SharePoint Server 2010 应用 5,000 个项目的默认 阅读全文
posted @ 2011-02-11 17:26 赏梅斋 阅读(938) 评论(0) 推荐(1) 编辑

摘要: 如果使用 SharePoint 对象模型编写自定义解决方案,应该注意与性能、可扩展性和可伸缩性相关的常见问题。本主题可以帮助您有效地对现有 SharePoint 应用程序进行故障排除并提高其性能,或者编写新 SharePoint 应用程序。在这两种情况下,都需要了解如何使 SharePoint 对象模型高效地工作,以及如何将常规编程技巧专门应用于 SharePoint 平台。使用SPQuery对象设计合理的查询可以帮助您避免随着时间的推移而可能出现的性能问题,因为网站的列表和文件夹数目会不断增加。以下技巧可以帮助您尽可能最高效地使用 SPQuery 对象。使用界定的 SPQuery 对象。Ro 阅读全文
posted @ 2011-02-11 17:09 赏梅斋 阅读(1156) 评论(0) 推荐(0) 编辑