Задать вопрос
Ответы пользователя по тегу C#
  • Как сделать так, чтобы использующее SQLite WinForms.Net приложение работало и на 32 и на 64 битных системах?

    @tsul
    Это можно сделать, используя встроенную фичу System.Data.SQLite, которая ищет версию SQLite.Interop.dll кроме как рядом с собой, ещё и в директории, соотв. архитектуре, т.е. x86 или x64 соответственно.
    См. Using Native Library Pre-Loading в ихней wiki.

    Делал так:
    1. Качал Precompiled Binaries для x86 и x64, которые не mixed-mode, а System.Data.SQLite.dll + SQLite.Interop.dll. В них System.Data.SQLite.dll совпадают.
    2. Клал всё это в директорию cs/Common/SQLite/ так:
      • System.Data.SQLite.dll
      • System.Data.SQLite.pdb
      • System.Data.SQLite.xml
      • x86/
        • SQLite.Interop.dll
        • SQLite.Interop.pdb

      • x64/
        • SQLite.Interop.dll
        • SQLite.Interop.pdb


    3. В проекте делал Private Reference (т.е. Copy Local = True) на System.Data.SQLite.dll, и линки с путями на Interop dll-ки. Линки в csproj выглядят так (кажется, руками правил чтоб пути были x86 и x64):
      <Content Include="..\..\..\cs\Common\SQLite\x86\SQLite.Interop.dll">
            <Link>x86\SQLite.Interop.dll</Link>
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
          </Content>
          <Content Include="..\..\..\cs\Common\SQLite\x86\SQLite.Interop.pdb">
            <Link>x86\SQLite.Interop.pdb</Link>
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
          </Content>
          <Content Include="..\..\..\cs\Common\SQLite\x64\SQLite.Interop.dll">
            <Link>x64\SQLite.Interop.dll</Link>
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
          </Content>
          <Content Include="..\..\..\cs\Common\SQLite\x64\SQLite.Interop.pdb">
            <Link>x64\SQLite.Interop.pdb</Link>
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
          </Content>

    Всё, после сборки в Debug или Release получаются две директории x86 и x64 с соотв. SQLite.Interop.dll, System.Data.SQLite.dll и exe-шник проги, который работает в винде любой битности.

    Там еще чуток посложнее было, потому как тот же проект у меня под Mono на Linux шёл, поэтому были еще ссылки на libsqlite3.so.0, но это уже другая история.
    Ответ написан
    Комментировать
  • Почему консольные приложения, запущенные через mono, потребляют много оперативной памяти?

    @tsul
    Хорошо бы подробности типа версии .NET, Mono, и какой тип памяти меряете/сопоставляете.
    Только что проверил на UDP-ресивере у себя (Windows7 x64 .NET 3.5 vs. Fedora Linux 12 x86-64 Mono 2.10.2)
    -- одинаково.
    Ответ написан
    Комментировать